一个关于XML字符编码的简单问题。(50分)

  • 主题发起人 主题发起人 HORNEY
  • 开始时间 开始时间
H

HORNEY

Unregistered / Unconfirmed
GUEST, unregistred user!
请问XML文件无论用哪种方法编码是否每个字符都占2个字节,如果不是的话,XML解析器
怎么判断字符位数,因为如果这也不知道的话,就更别提读懂头部信息了。
同样的问题还有ASP和PHP,他们怎知道要读的程序件和发送的字符串是什么编码?
 
不同的解析器能否支持的字符集不一样,不是需要每个字符都用unicode存的,
解析器看encoding,如果没有就用默认的。php的xml解析器好像就不认gb2312,
也不能用汉字标签,微软的就可以。

-----
http://www.8421.org
 
我还是有点没懂,XML文件头也是文件的一部分,难道它可以超然于正文之外用ASCII编码。
 
php的解析器要求文件头和标签必须是英文
msxml没有这个要求,他可以处理ascii和gb2312混合编码的xml文件
 
接下去有一个关于判断文件编码的问题:
WINNT里面的记事本可以生成ASC和UNICODE两种格式的文件,但是我用DELPHI做了个小程序
测试后发现生成的UNICODE的文件好像一开始多了两个字节,它是干嘛用的?然后我再用
DELPHI的WIDECHAR数组对一个TXT文件写内容,然后再用记事本打开,也可以正常显示,
大家说说这是怎么回事,记事本到底是怎么判断文件是不是UNICODE的?是那两个字节?还
是根据高位低位?如果不是用那两个字节,那它们是什么东西,TXT文件有没有它们到底可
以吗?
 
有意思的问题
 
我今天又想了一下这个问题,总结出一个大致的思路,请各位看看对不对:
由于UNICODE的与ASC兼容部分的高位都是0,而0在ASC字符串里又是结束的意思,我想是不是
NT的记事本是这么工作的---先对整个文件作一次循环,如果有发现0,而且发现的位置
又小于整个文件的尺寸,那就认为这是一个UNICODE文件,但是这样的时间很长,而且还
有缺馅,就是如果整个文件都是CJK字符的话,它也会误认为是ASC文件,所以我认为记事本
是先用开头的255和254两个字节作判断,如果它们不存在的话,再采用遍历法。
 
这个我知道,文件开头的FF FE就是unicode文本的标志
 
那么是不是只要是UNICODE文件就肯定要FF和FE开头,如果没有FF和FE就算编缉器没有识别
出来也不是它的责任了,是这个意思吗,那NT的记事本怎么有时认得出有时认不出呢?另外
XML文件里一般的ASC怎么和UNICODE文件混排呢?用记事本显然是达不到这种效果的。
 
经过一天的尝试,我发现NT中的记事本在处理UNICODE和ASC文件时有如下规律:
1。如果文件字节数为单数,则铁定为ASC。
2。如果双数时先看头两个字节,若为FF FE的话就是UNICODE。
3。倘若不是FFFE时就遍历整个文件,查找有无字节是00,有便当作UNICODE处理,因为由
于历史原因的关系,00在ASC中是表示结束的意思,是不应该出现的东西。
我想问的是,这是不是就是官方推荐处理两者关系的方法?这种方法好不好,一般软件用
得多不多,请高手们予以指教。
 
多人接受答案了。
 
后退
顶部