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

本文关键字:字符串 转换 UTF-8 格式 WP7 | 更新日期: 2023-09-27 18:09:59

我在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 is: System。Byte []

任何想法?

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

不能通过使用Convert.ToStringbyte数组转换为字符串。你需要解码它,因为它是一个utf8编码的字节数组。

string jsonStringUTF8 = Encoding.UTF8.GetString(encodedBytes, 0,encodedBytes.Length)

根据规范,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,它将出现在转换后的字符串中,尽管对您来说是不可见和不可访问的。被一个XML阅读器在不应该有BOM的地方乱翻了。

这里是Jon Skeet关于字符串的文章http://csharpindepth.com/Articles/General/Strings.aspx,以及他关于Unicode和编码的文章http://csharpindepth.com/Articles/General/Unicode.aspx。