Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何处理字符串?_C#_String_Unicode_Encoding_Character Encoding - Fatal编程技术网

c#如何处理字符串?

c#如何处理字符串?,c#,string,unicode,encoding,character-encoding,C#,String,Unicode,Encoding,Character Encoding,我连接到一个Web服务,它会给我一个类似这样的响应(这不是整个字符串,但你知道了): sResponse=“{\“Name\”:\“Bod\u00f8\”,\“homePage\”:\“http:\/\/www.example.com\” 如您所见,“Bod\u00f8”并不是它应该的样子。 因此,我尝试使用字符串将unicode(\u00f8)转换为char: public string unicodeToChar(string sString) { St

我连接到一个Web服务,它会给我一个类似这样的响应(这不是整个字符串,但你知道了):

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;
    }
公共字符串unicodeToChar(字符串sString)
{
StringBuilder sb=新的StringBuilder();
foreach(字符串中的字符)
{

如果(chars>=32&&chars可能您想尝试:

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

您基本上是在谈论从转换。请尝试此链接--在底部附近,您将看到一个公共可用库的列表,包括一些C#中的库,它们可能会满足您的需要。

优秀的库在解码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(sResponse);
Assert(obj2.Name==“Bodø”);
Assert(obj2.HomePage==”http://www.ex.com");
公众课堂反应
{
公共字符串名称{get;set;}
公共字符串主页{get;set;}
}

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

首先,我尝试了一个简单的替换,正如OP所说的(在一个在线表格的帮助下)。但在添加了2个替换之后,我想“不行!”

所以在看了更多的“代码”后,我突然想到

“\u”是一个前缀,后面的4个字符是十六进制编码的字符代码!因此,编写一个简单的正则表达式来查找后面有4个字母数字字符的所有\u,然后将最后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;
    }

我希望它能帮助一些人…我讨厌在我真的只需要几个函数的时候添加库!

uhm…我现在看到unicodeToChar函数根本帮不了我:p我的错…累了:Pnah,因为函数是错误的,这可能不起作用。函数接受每个字符,因此不处理t他\u00f8JSON已经被我自己解析了,我只需要解决这个问题:P或者你知道有一个库可以把这个Json解析成一个数组:{“Topic\”:{“001\”:{“ItemHeader\”:“Test\”,“ItemText\”:“Comment\”},\“Image\”:{“001\”:{“ItemImage\”:“www.Image.com\,“ImageDescription\”:“description\”描述“}}如果您这样做了,请留下一个例子,请:)听起来不错,但当我早些时候尝试添加JSON.net库时,它占用了我设备上的所有内存。我发现还有一件事我写错了。unicode的问题是字符串是这样的:var sResponse=“{\'Name\:\'Bod\\u00f8\,…..等等”请注意,在“Bod”之后是两个斜杠,而不是一个。这是我真正的问题。我不能用\u00f8替换\\u00f8,因为字符串中会有更多的Unicode。
 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;
    }