我正在努力解决以下问题。我正在使用 VS10 并使用 .NET 框架 2.0。用 C# 编码。
我正在制作一个简单的编辑器,将其文本交给webservice。我知道 .NET 使用 UTF-16(我相信默认是 LE?我想要 Big Endian)。我想让它能够在任何编辑器中工作,因此附加一个 BOM。问题是通过html它会改变我相信UTF-8?或者至少从以下错误中可以看出:
Client found response content type of 'text/html;
charset=UTF-8', but expected 'text/xml'.
The request failed with an empty response.
编辑:文档警告所有属性的编码都是 UTF-8,没有 BOM 标记。editorTextString 是属性之一。但是要上传的文件内容必须是带有 BOM 的 UTF-16BE。我检查了 .net 是否自动翻译编码,但它没有。或者至少中文字母变成了?所以我需要重新编码或转换更好的说法,将文本转换为 UTF-16BE WITH BOM 而不是现在的不带 BOM 的 UTF-8。
我已经浏览了大量示例,但看不到我在这里做错了什么。有人可以提供建议或更正代码吗?(是的,我还阅读了 Jon 关于 unicode 的非常酷的文章 :)) 理论很清楚,但缺乏实际实践。
// Convert to UTF-16 Big Endian
Encoding leUnicode = Encoding.Unicode;
Encoding beUnicode = Encoding.BigEndianUnicode;
byte[] editorTextBytesLE = leUnicode.GetBytes(editorTextString);
Console.WriteLine("Little Endian - Encoded bytes:");
foreach (Byte b in editorTextBytesLE)
{
Console.Write("[{0}]", b);
}
Console.WriteLine();
byte[] editorTextBytesBE = Encoding.Convert(leUnicode, beUnicode, editorTextBytesLE);
Console.WriteLine("BIG ENDIAN - Encoded bytes:");
foreach (Byte b in editorTextBytesBE)
{
Console.Write("[{0}]", b);
}
Console.WriteLine();
String decodedString = UnicodeEncoding.BigEndianUnicode.GetString(editorTextBytesBE);
Console.WriteLine();
Console.WriteLine("Decoded bytes:");
Console.WriteLine(decodedString);
// inserting UTF-16BE BOM marker, which eases recognition for any editor
byte[] editorTextBytesToSend = { 0xfe, 0xff };
editorTextBytesToSend.CopyTo(editorTextBytesBE, 2);
File.WriteAllText(fileName, decodedString);
Console.WriteLine("Uploading {0} to {1} ...", fileName, myURL);
// Upload the file to the URL
editorTextBytesBE = myWebClient.UploadFile(myURL, "PUT", fileName);
我找不到任何可以切换到大端序的东西,但是我已经看到了一些切换到 UTF-8 的示例(我无法正常工作)。非常感谢任何帮助、示例或链接以获取 UTF-16BE 的代码。