搜索
bottom↓
回复: 17

自动识别串口接收的文本编码格式BIG5,unicode,GB2312等...

[复制链接]

出0入0汤圆

发表于 2018-6-13 14:47:09 | 显示全部楼层 |阅读模式

通过程序怎么实现自动识别串口接收的数据是GB2312还是unicode,BIG5的编码格式?
本人通过识别到的编码格式,进行LCD显示。

就是让自己的设备支持多种编码格式;支持GB2312,UNICODE,BIG5等;

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2018-6-13 14:48:17 | 显示全部楼层
通过上位机发送多种语言,下位机能够自动识别文本编码格式,从而进行语音播报或者LCD显示

出0入0汤圆

发表于 2018-6-13 15:06:04 | 显示全部楼层
我看好你,努力去实现吧,哈哈。

出0入92汤圆

发表于 2018-6-13 15:22:21 | 显示全部楼层
指定起始符/结束符,收到文本后通过对比不同编码的起始符/结束符来判断收到的是什么编码

出0入57汤圆

发表于 2018-6-13 15:41:22 | 显示全部楼层
多加1字节表示编码不就可以了吗

出0入8汤圆

发表于 2018-6-13 15:48:11 | 显示全部楼层
应该不能识别吧
如果能的话,PC上的软件就不会有乱码出现了。

出0入0汤圆

发表于 2018-6-13 17:00:34 | 显示全部楼层
如果你自己的设备的话 可以做,协议上做 前2个字符发送固定的字符

出0入0汤圆

发表于 2018-6-13 17:48:07 | 显示全部楼层
参照系统自带的TXT记事本。
没有数据头的话,根本无解,除非你搞一套算法区分。

出0入0汤圆

发表于 2018-6-13 17:58:26 来自手机 | 显示全部楼层
我看好你,努力去实现吧,哈哈。

出200入2554汤圆

发表于 2018-6-13 18:02:01 | 显示全部楼层
本帖最后由 t3486784401 于 2018-6-13 18:16 编辑

Windows 下 GB2312 和 Unicode 之间互换用的是这么两个 API 函数:

#1:GB2312 -> Unicode
  1. int MultiByteToWideChar(
  2.   UINT CodePage,         // code page
  3.   DWORD dwFlags,         // character-type options
  4.   LPCSTR lpMultiByteStr, // string to map
  5.   int cbMultiByte,       // number of bytes in string
  6.   LPWSTR lpWideCharStr,  // wide-character buffer
  7.   int cchWideChar        // size of buffer
  8. );
复制代码


#2:Unicode -> GB2312
  1. int WideCharToMultiByte(  UINT CodePage,            // code page
  2.   DWORD dwFlags,            // performance and mapping flags
  3.   LPCWSTR lpWideCharStr,    // wide-character string
  4.   int cchWideChar,          // number of chars in string
  5.   LPSTR lpMultiByteStr,     // buffer for new string
  6.   int cbMultiByte,          // size of buffer
  7.   LPCSTR lpDefaultChar,     // default for unmappable chars
  8.   LPBOOL lpUsedDefaultChar  // set when default char used);
复制代码


实际使用过程中还牵涉到乱码字符处理等问题。至于 BIG5 目前没研究过。UTF-8 的话,可以通过移位换算转到 Unicode。
如果在 Windows 端做这些转换的话,倒还是有现成的 API;你要是嵌入端搞的话,目测只剩下查表了。

搜索下载全部的(或者常用的)汉字字符集,分别另存为 GB2312/Unicode/BIG5 等,然后自己做成表格,也就几十 kB 的空间。

P.S. 发一段以前做的 GBK->UTF8 的字典加载程序,可以把其中 GBK 的码抽出来作为字符集用:

-------------------------------------------------------------------------------------

编辑原因:追加字符集源码

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-6-13 20:48:27 | 显示全部楼层
通过多字节识别应该可以办到

出0入0汤圆

发表于 2018-6-13 23:54:56 来自手机 | 显示全部楼层
fatfs文件系统的cc936文件中的函数,你没用过吗?

出0入0汤圆

发表于 2018-6-21 12:23:10 | 显示全部楼层
楼主没说支不支持中文,要是只是ASCII字符就比较好办,汉字比较麻烦

出0入0汤圆

发表于 2018-6-22 11:51:08 | 显示全部楼层
你这标题很危险,还以为来分享什么东西

出0入0汤圆

发表于 2018-6-22 14:06:12 | 显示全部楼层
以前研究过,都是整段文字,排除法去筛选是哪个编码,当然也存在误判的,尤其是字比较少的时候,2种编码都可能符合。

出0入0汤圆

发表于 2018-11-16 14:06:23 | 显示全部楼层
固定数据可以,不固定数据恐怕不行啊,协议协议 需要协商的,你不给他条件,他只认识 1和0

出0入0汤圆

发表于 2018-11-16 15:36:10 | 显示全部楼层
自动识别GB2312 GBK GB18030和utf8的做过,但是big5没有弄过。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 18:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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