C# 将UTF-8转换为UTF-16BE

C# 将UTF-8转换为UTF-16BE,c#,.net,encoding,C#,.net,Encoding,我正在努力解决以下问题。 我正在使用V.S.10和.NETFramework2.0。用C#编码 我正在制作一个简单的编辑器,将其文本交给Web服务。我知道.NET使用UTF-16(我相信默认值是LE?并且我想要Big-Endian)。我想让它能够在任何编辑器中工作,因此附加一个BOM表。问题是,通过httml,我相信它会变成UTF-8?或者至少从以下错误中可以看出: Client found response content type of 'text/html; charset=UTF-8'

我正在努力解决以下问题。 我正在使用V.S.10和.NETFramework2.0。用C#编码

我正在制作一个简单的编辑器,将其文本交给Web服务。我知道.NET使用UTF-16(我相信默认值是LE?并且我想要Big-Endian)。我想让它能够在任何编辑器中工作,因此附加一个BOM表。问题是,通过httml,我相信它会变成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是属性之一。但要上传的文件内容必须是UTF-16BE格式,并带有BOM表。我检查了一下.net是否自动转换了编码,但没有。或者至少中文字母变成了“s”。因此,我需要重新编码或转换,更好地说,文本到UTF-16BE与BOM,而不是UTF-8没有BOM,它是在现在

我看了很多例子,看不出我做错了什么。有人能提供建议或纠正代码吗?(是的,我也读过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);
我还没有找到任何东西可以切换到big-endian,但我看到了一些切换到UTF-8的示例(唉,我无法使用这些示例)。非常感谢任何帮助、示例或链接,以获取UTF-16BE的代码

部分答案:

下面的代码看起来没有插入任何内容。相反,它会用BOM表覆盖位置2和3处的2个字节。它跳过了前2个

 // inserting UTF-16BE BOM marker, which eases recognition for any editor
    byte[] editorTextBytesToSend = { 0xfe, 0xff };
    editorTextBytesToSend.CopyTo(editorTextBytesBE, 2);

要使BOM为UTF-X编码的文件,只需使用正确的编码创建TextWriter:

using(var writer = 
    new StreamWriter(fileName, new Encoding.UnicodeEncoding(true,true,true))
{
   writer.Write(editorTextString);
}
使用提供BOM的构造函数


旁注:您的问题很可能与使用这种罕见的编码无关,但它应该可以修复您的代码现在尝试执行的操作。

我成功地使用了以下代码:

字节[]BOMTextBytesToSend={0xfe,0xff}

byte[]editorTextBytesToSend=System.Text.Encoding.bigendianucode.GetBytes(editorTextString)


CopyTo(editorTextBytesToSend,0)

WebService方法到底是如何定义的(WSDL)?很少需要这些转换。在WSDL中,它的定义如下:
code
我看不出从WSDL上传
editorTextString
CreateNote
之间有什么联系。不正确。这是webservice的定义。editorTextString是对象数组中的属性之一。这就是我被困住的原因。文档确实警告所有属性的编码都是UTF-8,没有BOM标记。editorTextString是属性之一。但要上传的文件内容必须是UTF-16BE格式,并带有BOM表。我检查了一下.net是否自动转换了编码,但没有。或者至少中文字母变成了“s”。因此,我需要重新编码或转换,更好地说,文本到UTF-16BE与BOM,而不是UTF-8没有BOM,它现在在。错误涉及xml/html。我认为UTF8很好。嗯,这就是它应该被使用的方式吗?我得到了一些错误-对于unicode错误,unicode工作正常,我还可以做其他事情,比如UTF7或8:error 1'System.IO.StreamWriter'是一个'type',但像'variable'和error 2'System.Text.Encoding'一样使用。它不包含'UnicodeEncoding'的定义@susvdeven,现在应该更好了。是的,事实上,我在寻找一个插入BOM的好例子时遇到了一些问题,很多删除BOM的例子:P这更像是猜测和尝试,但是你有没有一个想法(或链接)到我可以找到一个好例子的地方?我想你应该首先找出是否有任何这些是必要的。不幸的是,它似乎确实是。正如我所希望的那样,编辑器能够转换任何语言,并且它目前不需要转换。我首先测试了文本是否通过了http协议,但没有。属性的编码为UTF-8,无BOM。Web服务需要带BOM的UTF16-BE。