如何区分GB字节流和UTF8字节流?

xiaoyao888 2006-09-01 08:02:00
我用记事本试验了一下,没有加BOM的情况下保存的UTF8的文本,内容是“汉汉”,如果按GB码来识别的话就会是“姹夋眽”,不过记事本还是认成“汉汉”,说明记事本是默认先识别UTF8码的,如果我在里面加了非UTF8的编码,比如CCCC,也就是“烫”,VC里未初始化的数据都是这个,记事本就会认成“姹夋眽烫”,也就是说记事本是扫描整个文件的内容如果都符合UTF8的格式就认为是UNICODE的字符,否则就认为是GB码。不知道是不是如此。这样的话,如果没有指定的话,我怎么识别一个字节流是GB字节流还是UTF8字节流?难道要把整个字节流全部按UTF8格式识别一遍,发现有不符合UTF8格式的字节就认为其是GB的吗?
...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2006-09-01
  • 打赏
  • 举报
回复
学习
xiaoyao888 2006-09-01
  • 打赏
  • 举报
回复
刚才看了一下那个“联”虽然GB码符合UTF8的标准,但是映射后的结果是6A,这个是不对的,因为小于80的UNICODE码对应UTF8应该是单字节的,所以这个应该以GB码来识别,看来windows的记事本也不够严谨啊,相比之下UE就不会出现这样的问题。
xiaoyao888 2006-09-01
  • 打赏
  • 举报
回复
我觉得Windows记事本默认的绝对是UTF8,mathe所说的“联通”就是符合UTF8的GB码
其字节流为CC A1 CD A8,正好符合UTF8,但对应UNICODE码是未定义的码位所以会显示不对
xiaoyao888 2006-09-01
  • 打赏
  • 举报
回复
还是得试啊,看来是没有有效办法一下就认出来,就像记事本输入一堆“姹夋眽”保存后,最后打开还会被全都认成“汉”,如果就是这么巧,输入的还就是全部符合UTF-8的GB流,那还真的没法认了。看来还是得在读取的时候指定。或者加入BOM才行啊。
mathe 2006-09-01
  • 打赏
  • 举报
回复
Windows记事本中,默认文件格式都是GB的,如果其他格式,需要在文件最开始位置添加特殊字符。
如果是UTF格式,那么前面要添加三个字符EF BB BF
比如Unicode编码,那么最开始两个字符必须是FF FE
此外应该还有很多其他格式。
比如如果你在记事本中输入“联通”两个字就保存,然后重新打开,就会发现内容不对了。
这个肯定是因为记事本将"联通"中前三个字节当成格式符了
a_b_c_abc7 2006-09-01
  • 打赏
  • 举报
回复
如果是GB的话,你很容易就找到不符合UTF-8的编码,如果试了100个字节都符合UTF-8,说明99.999%的可能是UTF-8。实在不放心,你就把它识别完.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧