如何在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 []
任何想法?
不能通过使用Convert.ToString
将byte
数组转换为字符串。你需要解码它,因为它是一个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。