打印

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

[复制链接]
8421|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码。

使用特权

评论回复
5
brize_huang|  楼主 | 2011-1-20 22:32 | 只看该作者
2# 原野之狼
我也觉得办不到~~

使用特权

评论回复
6
mxh0506| | 2011-1-20 22:33 | 只看该作者
好久不搞这些了,没记错的话,16位GB码可以和8位ASCII码混用;如果是unicode,西文字母也应该是unicode,不能用8位的吧?

使用特权

评论回复
7
brize_huang|  楼主 | 2011-1-20 22:52 | 只看该作者
GBK跟ASCII是可以的
其实我是在用FATFS读SD卡的长文件名,他要求提供一个UNICODE to GBK的函数ff_convert,而我的转换表是存在SD卡中的,只要在ff_convert中调用ff_open就会出错,于是我在ff_convert中直接把unicoded码不经过转换直接返回来,结果读到的文件名就是上面那种形式(西文字母被它截成一个字节了)。

使用特权

评论回复
8
ejack| | 2011-1-21 08:17 | 只看该作者
混合格式,并且没有间隔,很难区分。
简单偷懒的解决办法:LZ可以把ff_convert函数稍微改改,每返回一个中文Unicode码时多加1字节标识(非ASCII区),这样应用程序就可判别出后续按ASCII处理还是Unicode处理了。
根本解决办法还是找出为什么调用ff_open出错……

使用特权

评论回复
9
wljs012| | 2011-1-21 08:22 | 只看该作者
Unicode码和ASCII应该是没办法区分。
GBK和ASCII很好区分,一般的小打印机都是GBK+ASCII的。

使用特权

评论回复
10
sdpz| | 2011-1-21 10:24 | 只看该作者
本帖最后由 sdpz 于 2011-1-21 10:26 编辑

ascii可以混合中英文。
“中文”的ascii码是 D6D0 CEC4
中文字符的ascii码的高字节是 大于 0x7F 的,也就是127。
而低字节,一般也是>127的,但有些生僻字除外。因此,在统计字符串长度时,如果检测到>127,表示这连续两字节是一个中文字符,长度++,要跳过检测字符的低字节。
而对于<=127的字符,毫无疑问就是英文字符、数字字符以及一些符号。

使用特权

评论回复
11
china_fog| | 2011-1-21 10:38 | 只看该作者
可以混合辨认的,中文的你看你采用的是什么编码,英文的ASCII码的编号跟GB码的编号不重,而且,GB码两个字节任何一个字节都不会落在英文的ASCII码里面。这个很容易,自己看看就知道了

使用特权

评论回复
12
brize_huang|  楼主 | 2011-1-21 11:34 | 只看该作者
谢谢楼上两位,中文是Unicode码,所以没办法根据高字节来判断。

使用特权

评论回复
13
brize_huang|  楼主 | 2011-1-21 11:35 | 只看该作者
8# ejack
我还是去找找看ff_open出错的原因吧。

使用特权

评论回复
14
sdpz| | 2011-1-21 14:10 | 只看该作者
喔,你是说unicode, unicode中文字符的范围是4e00~9fa5

使用特权

评论回复
15
china_fog| | 2011-1-21 14:12 | 只看该作者
UNICODE应该也可以,GSM模块当中短信好像就是UNICODE的,是完全可以区分的。2年前做过类似的东西

使用特权

评论回复
16
twz8858877| | 2011-1-21 14:43 | 只看该作者
英文也采用unicode编码,英文的unicode编码第一字节为00,第二字节为其本身的ASCII码

使用特权

评论回复
17
OpCode| | 2011-1-21 17:07 | 只看该作者
中英文都用2个字节表示那当然不存在问题,哈哈!

使用特权

评论回复
18
brize_huang|  楼主 | 2011-1-21 17:22 | 只看该作者
可能是我表达的不是很清楚。
中文.txt为例
现在读到的是4e2d 6587  2e 74 78 74而不是4e2d 6587  002e 0074 0078 0074
如果英文也是两个字节那当然可以,关键是现在英文前一个字节00被他截掉了,也就是说汉字用两个字节的
Unicode码(不是GBK码),英文用一个字节的ASCII码

我的看法这样处理后的编码已经无法辨别了
欢迎大家讨论

使用特权

评论回复
19
ayb_ice| | 2011-1-22 08:28 | 只看该作者
2L已经说的很清楚了
其实这个问题很简单,那两个编码值范围有冲突

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

11

帖子

1

粉丝