How Can We Help?

POSBOX 列印正體中文時會出現亂碼

You are here:
< All Topics

使用樹莓派安裝 POSBOX V13 後,本以為接上熱感式印表機即可直接列印

接上國外買的 EPSON TM-T88V 後,印出的中文全都是方框

查了之後才知道國外的 EPSON 印表機是沒有內建中文字碼的

所以又上了露天拍賣買了一台中古的 EPSON TM-T88IV,到手後也確認過確實有內建正體中文字碼表(CP950 = BIG5)

哪知道中文字列印中來全部都變成了”控控控”

上網查了一些資料,才知道原來 py-xml-escpos 的作者因為查不到東南亞語系的相關資料

也無法測試(畢竟要購買當地的印表機才能測試),所以這部分並沒有完整支援

所幸對岸的同胞們早在一年前就遇到了相同的問題,也找到了解決方案:加入相對應的編碼即可

解決方法

遠端登入 POSBOX

ssh pi@posbox.ip

預設密碼為 admin

首先修改 constants.py
sudo vim /home/pi/odoo/addons/hw_escpos/escpos/constants.py

@ Line 78 加入下面兩行

TXT_ENC_PC936 = '\x1C\x21\x00' # PC936 GBK(Guobiao Kuozhan)
TXT_ENC_PC950 = '\x1C\x21\x00' # PC950 BIG5

然後修改 escpos.py

sudo vim /home/pi/odoo/addons/hw_escpos/escpos/escpos.py

@ Line 751 加入下面兩行

'cp936': TXT_ENC_PC936,
'cp950': TXT_ENC_PC950,

@ Line 766,正體中文選 CP950,簡體中文選 CP936

將
encoding = 'cp437' 
修改為
encoding = 'cp950'

重開 POSBOX,就可以正常列印正體中文了

注意事項

以下是修改時遇到的問題,在這邊寫出來,有遇到這個問題的人就不會一直鬼打牆了

  1. 印表機支援字碼表,簡體中文只支援 GB2312的不能用,要找支援 GB18030,連正體中文都包含進去了
  2. 需要修改的是 POSBOX 中的 xmlescpos 模組,而不是 Odoo 的 hw_escpos 模組
  3. POSBOX 中的 xmlescpos
    位於
    /home/pi/odoo/addons/hw_escpos/escpos/escpos.py
    而非
    /home/pi/py-xml-escpos/xmlescpos/escpos.py
    /home/pi/py-xml-escpos/build/lib.linux-armv6l-2.7/xmlescpos/escpos.py

參考資料

posBox模块通过树莓派的硬件盒子打印出来的中文出现乱码

连接posBox的热敏打印机page code是不是要有cp936才能正常打印中文

Table of Contents