我有一些如下因素的要求:编码ASCII字符串的UTF8 XML文档中Byte数组
...的文件必须UTF8编码...的姓现场只允许(扩展)ASCII ... 市只允许ISOLatin1 ...消息必须提上(IBM的Websphere)的MessageQueue作为IBytesMessage
XML文档,用于纯朴起见,看起来像这样:(或者应当是)分别
<?xml version="1.0" encoding="utf-8"?>
<foo>
<lastname>John ÐØë</lastname>
<city>John ÐØë</city>
<other>UTF-8 string</other>
</foo>
的 “DOE” 部分是ASCII values 208,216,235。
我也有一个目标:
public class foo {
public string lastname { get; set; }
}
所以我实例化一个对象,并设置名字:
var x = new foo() { lastname = "John ÐØë", city = "John ÐØë" };
现在,这是我的头痛集(或inception如果你愿意。 ..):
- Visual studio /源代码是Unicode
- 因此:对象具有的Unicode姓氏
- XML序列化程序使用UTF-8到
- 姓氏应该只包含(扩展)ASCII字符文档编码;该字符是有效ASCII字符但ofcourse在UTF-8编码形式
我通常不会遇到与我的编码任何麻烦;我熟悉The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),但这个让我难住...
我知道UTF-8文档将完全能够“包含”这两种编码,因为这些编码点'重叠'。但是,当我需要将序列化消息转换为字节数组时,我迷失方向了。在做转储时,我看到C3 XX C3 XX C3 XX
(我没有实际的转储)。很明显(或者我一直盯着这个太长),姓氏/城市字符串以unicode形式放入序列化文档中;字节数组暗示如此。
现在我需要做什么以及在哪里确保姓氏字符串进入XML文档并最终以字符串形式作为ASCII字符串(以及实际的208,216,235字节序列),并且那个城市在那里作为ISOLatin1?
我知道的要求是倒退,但我不能改变这些(第三方)。我总是在内部项目中使用UTF-8,所以我必须支持unicode-utf8 => ASCII/ISOLatin1转换(当然,只适用于那些集合中的字符)。
我的头好痛......
“”ÐØë“部分分别是(或应该是)ASCII值208,216,235。”这是无意义的。没有ASCII值> 127 – CodesInChaos 2012-02-15 17:56:00
有,它被称为扩展ASCII(http://en.wikipedia.org/wiki/Extended_ASCII)。虽然它不是标准化的,但我需要允许(一些)disctritics,因此被迫使用它(并希望最好)。 – RobIII 2012-02-15 17:59:10
'文件必须以UTF-8编码'是我们必须关心的唯一要求? – 2012-02-15 18:19:39