我的WP7应用程序中有一个字符串。
我需要以UTF-8格式将此字符串发送到我的服务器。 如何将任何字符串转换为UTF-8格式?
到目前为止我已尝试过这个:
UTF8Encoding utf8 = new UTF8Encoding();
byte[] encodedBytes = utf8.GetBytes(jsonString);
string jsonStringUTF8 = Convert.ToString(encodedBytes);
其中jsonString是我需要的UTF8格式的字符串。
然而,当我尝试通过执行以下操作打印新的jsonStringUTF8时:
System.Diagnostics.Debug.WriteLine("JsonStringUTF8 is: {0}", jsonStringUTF8);
我得到的是:
JsonStringUTF8是:System.Byte []
有什么想法吗?
答案 0 :(得分:2)
您无法使用byte
将Convert.ToString
数组转换为字符串。你需要解码它,因为它是一个UTF8编码的字节数组。
string jsonStringUTF8 = Encoding.UTF8.GetString(encodedBytes, 0,encodedBytes.Length)
答案 1 :(得分:1)
根据规范,CLR中的字符串是UTF-16编码的Unicode字符。您实际上无法创建UTF-8 字符串,本身。 UTF-8编码的byte[]
可以将其转换为[UTF-16]字符串,代码如下:
byte[] rawUtf8EncodedData = ReadSomeUtf8EncodedBytes() ;
string decodedString = Encoding.UTF8.GetString( rawUtf8EncodedData ) ;
您还可以显式创建UTF8 Decoder
并使用它来进行转换,或者(最终技术)可能是使用System.IO
设施:
string value ;
byte[] rawUtf8EncodedData = ReadSomeUtf8EncodedBytes() ;
using ( MemoryStream utf8Stream = new MemoryStream( rawUtf8EncodedData ) )
using ( StreamReader reader = new StreamReader( utf8Stream , Encoding.UTF8 ) )
{
value = reader.ReadToEnd() ;
}
应该注意的是,如果您的源数据带有BOM,它将出现在转换后的字符串中,尽管您看不见且无法访问。对于那些不应该在BOM上的XML阅读器进行barfing,我得到了一点点。
这是Jon Skeet关于字符串的文章http://csharpindepth.com/Articles/General/Strings.aspx,以及他在http://csharpindepth.com/Articles/General/Unicode.aspx上关于Unicode和编码的文章。