2009-09-26 10 views
1

je me connecte à un webservice qui me donne quelque chose de réponse comme celui-ci (Ce n'est pas la chaîne entière, mais vous voyez l'idée):C# Comment traiter la chaîne?

sResponse = « {\ » Nom \ « : \ » Bod \ u00f8 \ ", \" homePage \ ": \" http: \/\/www.example.com \ "}";

Comme vous pouvez le voir, le "Bod \ u00f8" n'est pas comme il se doit. i essayé de avoisinant convertir le unicode (\ u00f8) char en faisant cela avec la chaîne:

 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; 
    } 

Mais il ne fonctionnera pas, probablement parce que la chaîne est affichée comme \ u00f8, et non \ u00f8.

Maintenant, ce ne serait pas un problème si \ u00f8 était le seul unicode que je devais convertir, mais j'ai eu beaucoup plus d'unicodes. Cela signifie que je ne peux pas utiliser la fonction de remplacement :(

quelqu'un L'espoir peut aider

+0

uhm ... je vois maintenant que la fonction unicodeToChar ne m'aide pas vraiment du tout: P Ma faute ... fatigué: P – Ikky

Répondre

0

Peut-être que vous voulez essayer.

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

nah, puisque la fonction était erronée, cela ne fonctionnera probablement pas. La fonction prend chaque caractère, et celui-ci ne traite pas le \ u00f8 – Ikky

1

Vous parlez essentiellement sur la conversion de JSON (JavaScript Object Notation) Essayez ce lien - près du bas, vous verrez une liste de bibliothèques disponibles au public, y compris certaines en C#, qui pourraient faire ce dont vous avez besoin

+0

JSON est déjà beeing analysé par moi-même, je ne dois résoudre ce problème: P Ou connaissez-vous d'une bibliothèque qui kan analyser cette JSON un tableau: {\ "Sujet \": {\ "001 \": {\ "ItemHeader \": \ "Test \", \ "ItemText \": \ "Commentaire \"}}, \ "Image \ ": {\" 001 \ ": {\" ItemImage \ ": \" www.image.com \ ", \" ImageDescription \ ": \" description \ "}}} Si oui, laissez un exemple pour, s'il vous plaît :) – Ikky

1

L'excellente bibliothèque Json.NET n'a aucun problème de décodage unicod e séquences d'échappement:

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")); 

Cela vous permet également de désérialiser des objets réels POCO, ce qui rend le code encore plus propre (bien que moins dynamique).

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; } 
} 
+0

Cela semble très bien, mais quand j'ai essayé d'ajouter la bibliothèque JSON.net plus tôt, il a pris toute la mémoire sur mon appareil. Et encore une chose que je vois j'ai mal écrit. Le problème avec unicode était que la chaîne était comme ceci: var sResponse = "{\" Nom \ ": \" Bod \\ u00f8 \ ", .... etc}" Notez qu'après "Bod" c'est deux barres obliques, pas une. C'est mon vrai problème. Et je ne peux pas simplement remplacer le \\ u00f8 par \ u00f8, car il y aura plus d'unicodes dans ma chaîne. – Ikky

0

Je sais que cette question devient assez vieux, mais je suis tombé sur ce problème à partir d'aujourd'hui, tout en essayant d'accéder à l'API Graph Facebook. Je récupérais ces étranges \ u00f8 et autres variations.

D'abord j'ai essayé un simple remplacement comme l'OP l'a également dit (avec l'aide d'une table en ligne). Mais je pensais "pas moyen!" après avoir ajouté 2 remplacements.

Alors après avoir regardé un peu plus sur les « codes » ça m'a frappé tout à coup ...

Le « \ u » est un préfixe, et les 4 caractères après c'est un code char codé hexadécimal! Donc, écrire une simple regex pour trouver tout avec 4 caractères alphanumériques après, et ensuite convertir les 4 derniers caractères en entier, puis à un personnage fait l'affaire.

Ma source est en 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 

J'ai aussi une version C# ici

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; 
    } 

J'espère que cela peut aider quelqu'un ... Je déteste ajouter des bibliothèques quand je vraiment seulement besoin de quelques fonctions d'eux!

Questions connexes