2

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

有任何想法吗?

4

2 回答 2

2

您不能byte使用 . 将数组转换为字符串Convert.ToString。您需要对其进行解码,因为它是一个 UTF8 编码的字节数组。

string jsonStringUTF8 = Encoding.UTF8.GetString(encodedBytes, 0,encodedBytes.Length)
于 2013-04-18T17:32:55.573 回答
1

根据规范,CLR 中的字符串是 UTF-16 编码的 Unicode 字符。本质上,您实际上无法创建 UTF-8字符串。UTF-8 编码可以将其转换回 [UTF-16] 字符串,代码如下:byte[]

byte[]  rawUtf8EncodedData = ReadSomeUtf8EncodedBytes() ;
string  decodedString      = Encoding.UTF8.GetString( rawUtf8EncodedData ) ;

您还可以显式创建一个 UTF8Decoder并使用它来进行转换,或者(最终技术)可能是使用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

于 2013-04-18T18:48:29.650 回答