以XML格式自动编码〜编码值

时间:2011-06-01 18:37:23

标签: c# xml

我有一个C#应用程序可以调用冷融合Web服务(它类似于Web服务)。此服务返回1252编码的XML格式,通过特定范围的字符编码如下:˜。这是实际回归的角色之一。我知道代码页1252中的实际文本值是“〜”,因为我可以在数据库中看到原始格式的值。

我从服务中获取原始XML并将其提供给XmlTextReader,如下所示:

// turn our raw xml into a reader
byte[] responseBytes = UTF8Encoding.UTF8.GetBytes(rawXml);
MemoryStream responseStream = new MemoryStream(responseBytes);
state.XmlResponseReader = XmlTextReader.Create(
    responseStream,
    new XmlReaderSettings { IgnoreWhitespace = true });

再往下我打电话给state.XmlResponseReader.Read()。当我这样做时,这些十六进制编码的值将完全从文本中删除。因此,以下文字:"˜hi there"将显示为“hi there”。我想“〜喜欢那里”。

我尝试了很多不同的东西来尝试将这些值解码为等效的文本,但没有任何效果。

手动我可以通过取十六进制值(98),将其转换为十进制(152)来获得正确的值。然后这样做:Encoding.GetEncoding(1252).GetString(new byte[] {152})。然而,完全手动的是不太可取的。有没有人知道我可以在.Net框架中使用更简化的功能来转换?

2 个答案:

答案 0 :(得分:0)

你可以在值上使用Server.Decode吗?见:http://msdn.microsoft.com/en-us/library/hwzhtkke.aspx

答案 1 :(得分:0)

最后我没有找到让XmlTextReader对数据进行自动编码的方法,但我找到了下一个最好的东西。使用ReadChars(在XmlReader上不可用)我能够从XML节点的InnerText中检索数据,而不会损坏这些字符,从而导致数据丢失。

这是我的代码:

int readCharacters = 0;
short bufferSize = 40;
char[] buffer = new char[bufferSize];
StringBuilder innerString = new StringBuilder();

do
{
    readCharacters = reader.ReadChars(buffer, 0, bufferSize);

    innerString.Append(buffer, 0, readCharacters);

} while (readCharacters != 0);

这允许我取回原始数据示例(—˜),此时我可以手动从该字符串中取出97和98,将它们转换为小数,然后转换为ascii字符。所以解决方案仍然是至少1/2手动,但ReadChars已经为我节省了一些前端的全字符串操作,否则这些操作是为了方便手动步骤所必需的。