极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: janeasy

U8glib 配合字库 在OLED上显示中文问题 utf-8 转 gb2312

[复制链接]
发表于 2016-2-25 10:51:40 | 显示全部楼层 |阅读模式
本帖最后由 janeasy 于 2016-3-1 21:08 编辑

手上有个带字库的OLED 12864,获取字库中数组,使用DrawBitmap 显示感觉很好,占用内存很小。
但是 arduino ide 中文用的是 utf-8,字库是GB2312 ,现在要通过第三方工具先将文字转成GB2312编码后才能显示,
有没有什么转换方法可以在arduino中解决?
回复

使用道具 举报

发表于 2016-2-25 17:51:35 | 显示全部楼层
用 16進的方式把 GB 碼放進去可以嗎?  在看程式時會看不到是什麼, 但執行時就可以.
又或用其他 IDE, 像 sublime + stino, 好像可以支援中文字串.
回复 支持 反对

使用道具 举报

发表于 2016-2-25 22:06:36 | 显示全部楼层
还没见过成功过的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-26 01:15:06 | 显示全部楼层
Super169 发表于 2016-2-25 17:51
用 16進的方式把 GB 碼放進去可以嗎?  在看程式時會看不到是什麼, 但執行時就可以.
又或用其他 IDE, 像 su ...

自己写了函数,十六进制GB编码和英文字母混合都可以显示的。但不太直观修改某个字的时候不太方便,网上找到个对应表,7k多条数据uno应该存不下。好像也没其他办法了,我去试试其他的ide。
先谢啦~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 21:07:41 | 显示全部楼层
Super169 发表于 2016-2-25 17:51
用 16進的方式把 GB 碼放進去可以嗎?  在看程式時會看不到是什麼, 但執行時就可以.
又或用其他 IDE, 像 su ...

测试了 sublime + stint  并不能使用gb2312 编码,编译上传程序。木有办法了吗?
回复 支持 反对

使用道具 举报

发表于 2016-3-2 02:49:40 | 显示全部楼层
janeasy 发表于 2016-3-1 21:07
测试了 sublime + stint  并不能使用gb2312 编码,编译上传程序。木有办法了吗?

剛試了, 唔 sure sublime 用什麼 code.  好奇怪, 一個中文字 3 個 byte, 既唔係 DBCS, 亦唔係 unicode.
如果用 println 經 serial 送番去PC 可以出得番原本既中文, 我仲以為佢用番 PC 既 編碼.  

唔好意思, 浪費左你既時間.  等我再研究一下, sublime 用什麼 code 去 save 中文字.

或者你都可以試下, 將一句中文放入 variable 再用 Serial.println 印出, 在 PC 既 serial.monitor 是否可以顯示出原來的中文.

例如:
  1. char a[] = "中文字";
  2. Serial.println(a);
复制代码
我係可以出得番 "中文字" 三個字, 但如果 display mode 用 HEX data 去睇, 佢既 code 好怪, 三個字 9 個 byte, 要研究下先.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-2 23:13:14 | 显示全部楼层
Super169 发表于 2016-3-2 02:49
剛試了, 唔 sure sublime 用什麼 code.  好奇怪, 一個中文字 3 個 byte, 既唔係 DBCS, 亦唔係 unicode.
...

sublime 的中文字符存储是和 arduino IDE 一样也是三字节的 utf-8,println 打印结果可以显示。可能没有支持GK2312格式编码的IDE了。
回复 支持 反对

使用道具 举报

发表于 2016-3-3 10:39:10 | 显示全部楼层
本帖最后由 Super169 于 2016-3-3 11:27 编辑

在網上找了一遍, sublime text 可以支援其他 encoding 的 (例如 Big5, GBK), 不過要加裝套件.
跟據網上所講, 要先裝 ConvertToUTF8 及 Codes33.
當我裝完 ConvertToUTF8, 已經可以直接打開 Big5 文件...不過, 唔知係咪我安裝出錯 (因為我公司有 proxy, 裝果陣有 error 出過, 有 D file 唔可以自動 download, 但最後行到我無理佢), 令到我個 stino 都失效, 不能上載程式.  Uninstall 左個 ConvertToUTF8 都唔得.

重裝一次 Stino,  又可以了.... 但最終只係開到 Big5 既 file, 如果當中有中文字, 都係會出 error, 或者你試試 GBK 吧.

以下是我失敗的經歷, 你可以參考一下, 希望你可以成功.

首先你要用 package control 裝左 ConvertToUTF8:


之後, 就可以選 encoding 為 GBK 或者 BIG5


不過, 當我嘗試用 notepad 輸入了 Big5 中文, 再用 sublime 打開, 還是出了亂碼.


但可以在 menu 中選 Reload with Encoding 再用 Big5 encoding 去開.


看來沒問題了, status bar 亦顯示現在是 BIG5 內碼了.



但....世事無常, 當我好開心咁去 compile.....


只要刪走左個"中"字就無事, 證明係同個"中"字有關.

有可能係 compiler 遇到 BIG5 既 character 出問題, 如果係咁, 就好難攪了.....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-3 21:04:50 | 显示全部楼层
Super169 发表于 2016-3-3 10:39
在網上找了一遍, sublime text 可以支援其他 encoding 的 (例如 Big5, GBK), 不過要加裝套件.
跟據網上所講 ...

经过测试 sublime text 安装插件后可以支持多种编码,但是包含中文后,除了使用 utf-8 编码方式,其他编码均无法编译(Compile)。Arduino IDE 在使用其他工具把源文件转换成GB2312后,字符串纯中文显示(如:“我”,显示为乱码)是乱码但是可以编译(Compile)通过并上传,但是如果中英文混合(如:我OLED)则无法编译(Compile),感觉这样做的意义并不大。

回复 支持 反对

使用道具 举报

发表于 2017-5-15 11:13:23 | 显示全部楼层
感觉用个中文好好复杂...
回复 支持 反对

使用道具 举报

发表于 2017-8-21 12:13:20 | 显示全部楼层
Notepad++即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-24 01:14:53 | 显示全部楼层

并不行,好像是编译器不支持
回复 支持 反对

使用道具 举报

发表于 2017-10-9 18:43:20 | 显示全部楼层
本帖最后由 wetnt 于 2017-10-9 18:44 编辑

现在我也遇到这个问题了,大家是怎么解决的?

http://tieba.baidu.com/p/4712581831

Arduino IDE 的程序使用UTF-8编码,即使INO转成GBK,编译时又自动转换为UTF-8。但是自带的串口监视器和多数中文字库液晶屏都是使用GBK编码的。
基于Arduino IDE是开源的,所以自己修改了部分代码,使得编译中使用GBK编码。

Python解决方案:
text = text.decode('utf-8')
args += text.encode('gb2312') + '\x00'

下面这是?
offset = (code - 0x8140) * 32 * 32 + 0xC000
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 11:58 , Processed in 0.050036 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表