我连接到一个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。 这意味着我不能只使用替换功能:(
希望有人可以提供帮助。
答案 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;
}
我希望它可以帮助别人......当我真的只需要一些函数时,我讨厌添加库!