中英文混合的ASCII码如何把他们辨别出来?

[复制链接]
9530|18
 楼主| brize_huang 发表于 2011-1-20 21:03 | 显示全部楼层 |阅读模式
本帖最后由 brize_huang 于 2011-1-20 22:28 编辑

各位大侠,如果读取到的代码是中英文混合的,有没有办法把他们辨别出来?
比如4e2d 6587  2e 74 78 74
前四个字节是“中文”的Unicode码,后面四个字节是“.txt”的ASCII码
原野之狼 发表于 2011-1-20 21:21 | 显示全部楼层
这么简单的事情 你自己想想也知道了
答案就是:办不到!
NE5532 发表于 2011-1-20 22:15 | 显示全部楼层
楼主,“中”字的GBK码是“4E2D”么?我怎么觉得是“D6D0“??被你雷得一跳一跳的!
另外做了3年的打印机,明确提示你GBK和ASCII是可以混合辨认滴。
 楼主| brize_huang 发表于 2011-1-20 22:28 | 显示全部楼层
:L我自己被弄晕了,是汉字的Unicode码。
 楼主| brize_huang 发表于 2011-1-20 22:32 | 显示全部楼层
2# 原野之狼
我也觉得办不到~~
mxh0506 发表于 2011-1-20 22:33 | 显示全部楼层
好久不搞这些了,没记错的话,16位GB码可以和8位ASCII码混用;如果是unicode,西文字母也应该是unicode,不能用8位的吧?
 楼主| brize_huang 发表于 2011-1-20 22:52 | 显示全部楼层
GBK跟ASCII是可以的
其实我是在用FATFS读SD卡的长文件名,他要求提供一个UNICODE to GBK的函数ff_convert,而我的转换表是存在SD卡中的,只要在ff_convert中调用ff_open就会出错,于是我在ff_convert中直接把unicoded码不经过转换直接返回来,结果读到的文件名就是上面那种形式(西文字母被它截成一个字节了)。
ejack 发表于 2011-1-21 08:17 | 显示全部楼层
混合格式,并且没有间隔,很难区分。
简单偷懒的解决办法:LZ可以把ff_convert函数稍微改改,每返回一个中文Unicode码时多加1字节标识(非ASCII区),这样应用程序就可判别出后续按ASCII处理还是Unicode处理了。
根本解决办法还是找出为什么调用ff_open出错……
wljs012 发表于 2011-1-21 08:22 | 显示全部楼层
Unicode码和ASCII应该是没办法区分。
GBK和ASCII很好区分,一般的小打印机都是GBK+ASCII的。
sdpz 发表于 2011-1-21 10:24 | 显示全部楼层
本帖最后由 sdpz 于 2011-1-21 10:26 编辑

ascii可以混合中英文。
“中文”的ascii码是 D6D0 CEC4
中文字符的ascii码的高字节是 大于 0x7F 的,也就是127。
而低字节,一般也是>127的,但有些生僻字除外。因此,在统计字符串长度时,如果检测到>127,表示这连续两字节是一个中文字符,长度++,要跳过检测字符的低字节。
而对于<=127的字符,毫无疑问就是英文字符、数字字符以及一些符号。
china_fog 发表于 2011-1-21 10:38 | 显示全部楼层
可以混合辨认的,中文的你看你采用的是什么编码,英文的ASCII码的编号跟GB码的编号不重,而且,GB码两个字节任何一个字节都不会落在英文的ASCII码里面。这个很容易,自己看看就知道了
 楼主| brize_huang 发表于 2011-1-21 11:34 | 显示全部楼层
谢谢楼上两位,中文是Unicode码,所以没办法根据高字节来判断。
 楼主| brize_huang 发表于 2011-1-21 11:35 | 显示全部楼层
8# ejack
我还是去找找看ff_open出错的原因吧。
sdpz 发表于 2011-1-21 14:10 | 显示全部楼层
喔,你是说unicode, unicode中文字符的范围是4e00~9fa5
china_fog 发表于 2011-1-21 14:12 | 显示全部楼层
UNICODE应该也可以,GSM模块当中短信好像就是UNICODE的,是完全可以区分的。2年前做过类似的东西
twz8858877 发表于 2011-1-21 14:43 | 显示全部楼层
英文也采用unicode编码,英文的unicode编码第一字节为00,第二字节为其本身的ASCII码
OpCode 发表于 2011-1-21 17:07 | 显示全部楼层
中英文都用2个字节表示那当然不存在问题,哈哈!
 楼主| brize_huang 发表于 2011-1-21 17:22 | 显示全部楼层
可能是我表达的不是很清楚。
中文.txt为例
现在读到的是4e2d 6587  2e 74 78 74而不是4e2d 6587  002e 0074 0078 0074
如果英文也是两个字节那当然可以,关键是现在英文前一个字节00被他截掉了,也就是说汉字用两个字节的
Unicode码(不是GBK码),英文用一个字节的ASCII码

我的看法这样处理后的编码已经无法辨别了
欢迎大家讨论
ayb_ice 发表于 2011-1-22 08:28 | 显示全部楼层
2L已经说的很清楚了
其实这个问题很简单,那两个编码值范围有冲突
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

11

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部