【问题标题】:How to convert a string to UTF-8 string format in WP7如何在 WP7 中将字符串转换为 UTF-8 字符串格式
【发布时间】:2013-04-18 17:30:20
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 根据您向服务器发送数据的方式,发送jsonStringencodedBytes。你不需要jsonStringUTF8
  • 我所知道的是服务器接受 utf8 编码的 jsonstring。它是否已经在那个编码中?如果您想看一下,可以在此处找到 WORKS 的等效 iOS 代码:stackoverflow.com/questions/16088288/… 如您在此处看到的,我通过 ASIHttpRequest 库使用了一些编码
  • 字符串没有编码。它们是字符串。如果要将字符串发送到服务器,则需要先将其转换为字节。转换为字节需要使用编码。此对话可以由您自己 (Encoding.UTF8.GetBytes) 完成,也可以由您用于向服务器发送内容的库完成。您还没有告诉我们您使用的是什么库。 (是WebClient吗?)
  • 是的,你可以在我告诉你的问题中看到我实际上想要做什么
  • @donparalias - 如果你要使用 `Convert.ToString(byte[]) 你必须提供你使用的编码。你得到的结果是意料之中的。

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


【解决方案1】:

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

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

【讨论】:

  • 我收到此错误:'System.Text.Encoding.GetString(byte[])' 由于其保护级别而无法访问
  • @donparalias - 我已将答案更改为重载版本(因为它是 Silverlight)。
  • 是的。先生非常感谢您。如果可能的话,您想评论一下 dtb 先生对上述 cmets 所说的话吗?因为我现在有点困惑。正如他所说的那样,我正在尝试做的事情是错误的还是正确的?
  • 不,你做得很好(实际上就是 dtb 所说的)。您正在使用 UTF8 编码器对字节数组进行编码(您可以使用他提到的 Encoding.UTF8.GetBytes(jsonString); 方法制作这一行。这将返回一个包含 UTF8 编码字符串的字节数组。然后您可以将此字节数组传递给您的客户端(或任何地方),您的客户可以通过我的回答中的方法解码字符串。他的第一条评论是说您可以发送字符串或字节数组,但不要同时发送(没有意义)。
  • @donparalias - 所有dtb 都在说你应该只发送 byte[] 然后在收到 byte[] 时解码并隐藏它。
【解决方案2】:

根据规范,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2010-09-21
    • 2015-11-14
    • 2012-06-25
    • 2016-09-02
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多