如何在WP7中将字符串转换为UTF-8字符串格式

时间:2013-04-18 17:30:20

标签: c# windows-phone-7 utf-8

我的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 []

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您无法使用byteConvert.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和编码的文章。