c#如何处理字符串?

时间:2009-09-26 02:16:11

标签: c# string unicode encoding character-encoding

我连接到一个webservice,给我一个像这样的响应(这不是整个字符串,但你明白了):

sResponse =“{\”Name \“:\”Bod \ u00f8 \“,\”homePage \“:\”http:\ / \ / www.example.com \“}”;

正如您所看到的,“Bod \ u00f8”并非如此。 因此,我尝试通过字符串将unicode(\ u00f8)转换为char:

     public string unicodeToChar(string sString)
     {
         StringBuilder sb = new StringBuilder();
         foreach (char chars in sString)
         {
             if (chars >= 32 && chars <= 255)
             {
                 sb.Append(chars);
             }
             else
             {
                 // Replacement character
                 sb.Append((char)chars);                  
             }

         }
         sString = sb.ToString();
        return sString;
    }

但是它不起作用,可能是因为字符串显示为\ u00f8,而不是\ u00f8。

如果\ u00f8是我必须转换的唯一unicode,现在不会有问题,但我得到了更多的unicode。 这意味着我不能只使用替换功能:(

希望有人可以提供帮助。

4 个答案:

答案 0 :(得分:1)

你基本上是在谈论从JSON (JavaScript Object Notation)转换。试试这个链接 - 在底部附近你会看到一个公开可用的库列表,包括一些可能符合你需要的C#库。

答案 1 :(得分:1)

优秀的Json.NET库在解码unicode转义序列时没有问题:

var sResponse = "{\"Name\":\"Bod\u00f8\",\"homePage\":\"http://www.ex.com\"}";
var obj = (JObject)JsonConvert.DeserializeObject(sResponse);
var name = ((JValue)obj["Name"]).Value;
var homePage = ((JValue)obj["homePage"]).Value;
Debug.Assert(Equals(name, "Bodø"));
Debug.Assert(Equals(homePage, "http://www.ex.com"));

这也允许您反序列化为真正的POCO对象,使代码更清晰(尽管动态性较差)。

var obj = JsonConvert.DeserializeObject<Response>(sResponse);
Debug.Assert(obj2.Name == "Bodø");
Debug.Assert(obj2.HomePage == "http://www.ex.com");

public class Response
{
    public string Name { get; set; }
    public string HomePage { get; set; }
}

答案 2 :(得分:0)

也许您想尝试:

string character = Encoding.UTF8.GetString(chars);
sb.Append(character);

答案 3 :(得分:0)

我知道这个问题已经过时了,但是在尝试访问Facebook Graph API时,我在今天遇到了这个问题。我得到了这些奇怪的\ u00f8和其他变种。

首先我尝试了一个简单的替换,因为OP也说过(在在线表的帮助下)。但我觉得“没办法!”添加2次替换后。

所以在看了一下“代码”后,它突然袭击了我......

“\ u”是一个前缀,之后的4个字符是十六进制编码的字符代码!因此,编写一个简单的正则表达式来查找所有\ u后面有4个字母数字字符,然后将最后4个字符转换为整数然后转换为字符进行交易。

我的源代码是VB.NET

            Private Function DecodeJsonString(ByVal Input As String) As String
            For Each m As System.Text.RegularExpressions.Match In New System.Text.RegularExpressions.Regex("\\u(\w{4})").Matches(Input)
                Input = Input.Replace(m.Value, Chr(CInt("&H" & m.Value.Substring(2))))
            Next
            Return Input
            End Function

我这里也有一个C#版本

 private string DecodeJsonString(string Input)
    {
        foreach (System.Text.RegularExpressions.Match m in new System.Text.RegularExpressions.Regex(@"\\u(\w{4})").Matches(Input))
        {
            Input = Input.Replace(m.Value, ((char)(System.Int32.Parse(m.Value.Substring(2), System.Globalization.NumberStyles.AllowHexSpecifier))).ToString());
        }
        return Input;
    }

我希望它可以帮助别人......当我真的只需要一些函数时,我讨厌添加库!