unicode中不明白的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 15:52:45
最近在设计一个软件(用java语言做):要区分出文件是哪种unicode的实现方式
现在知道unicode分为六种实现方式:
1.UTF-8
2.UTF-8不带BOM的
3.UTF-16LE
4.UTF-16BE
5.UTF-16LE不带BOM
6.UTF-16BE不带BOM
现在如果要区分的话1.3.4这三种都能实现了,因为它们都带BOM,有这个标志,就很好区分了!但剩下的三种就不好区分了
“UTF-16LE”和“UTF-16LE不带BOM”的区别仅仅是文件的开头没有FF FE?
还有“UTF-16BE”和“UTF-16BE不带BOM”的区别仅仅是文件的开头没有FE FF?
但如果真是这样的话,为何要有这样的差别呢?只存在带BOM的UTF-16不就很好用吗,只看前面的BOM就能区别出此文件是哪种实现方式!
我的软件的设计思路是检查前面的BOM情况就能判断出1.3.4这三种情况,但是不带BOM的实在是不知道怎么实现了!请高手不吝指教啊!指明实现的思路或者是提供一个实现的类的方法!谢谢啊!

还有一个问题:现在知道unicode和ANSI是两种不同的编码集!但是不知道ISO和它们的关系是什么,ANSI和ISO的关系,有时候想看一个文件的encoding,出现UTF-16BE,UTF-16LE,UTF-8这三种格式完全可以接受(可能对unicode比较容易接受吧,标准太多太杂了,就喜欢unicode),但是有些结果却是ISO-8859-1,ISO-8859-9,Big5,windows-1250,windows-1253,并且不知道UTF-16不带BOM是以什么格式出现,总不能碰到个UTF-16不带BOM的文件显示它的encoding的时候还是UTF-16吧?完全晕了,现在感觉它们之间的关系真是错综复杂,希望高手能够明示!!!

你说的编码问题的结论都是对的,同情你。除了BOM的以外,自动判断的可能性基本不存在,你看看Windows自带的NotePad软件都是让人自己选编码的,呵呵。

ISO, Unicode, ANSI是不同的标准化组织,ISO是国际标准化组织,org啊,ANSI是美国的组织,Unicode是一大堆公司搞的组织,著名的MS/IBM/SUN等都在里面。
说起Unicode,其实是IBM没眼光,当年的EBICDIC编码如果及时扩展一下,没准就是事实的标准了。。