2010-03-04 2 views
2

Pour ce mot चौरेउत्तमयादव l'Unicode est ==> \u0938\u0941\u0916\u091A\u0948\u0928\u093E\u0928\u0940 \u0930\u0940\u091D\u0941\u092E\u0932 \u091C\u093F\u0935\u0924\u0930\u093E\u092EUnicode généré par la méthode toEscapedUnicode est sans espaces

et le regarder a des espaces avant \u0930 et \u091C

Mais quand je suis en train dans mon code

String tempString=Strings.toEscapedUnicode(strString); 

Cette méthode de conversion en Unicode donne un résultat sans espaces: \u0938\u0941\u0916\u091A\u0948\u0928\u093E\u0928\u0940\u0930\u0940\u091D\u0941\u092E\u0932\u091C\u093F\u0935\u0924\u0930\u093E\u092E

et c'est pourquoi ils ne correspondent pas. Ma méthode 'toEscapeUnicode' génère Unicode sans espaces. Je veux les espaces, alors comment le faire?

+1

Vous avez probablement besoin d'identifier le langage de programmation que vous utilisez (le script est Devanagiri). Avez-vous écrit la fonction 'toEscapedUnicode'? Si c'est le cas, nous aurons besoin de le voir pour avoir une chance de déterminer quel est le problème. –

Répondre

2

Il n'est pas une réponse entière, mais ... quand je Copy'n'Paste les caractères Unicode « चौरेउत्तमयादव » puis utiliser quelques outils pour analyser ce qui est là, je ne vois pas d'espace:

echo "चौरेउत्तमयादव " | odx 

Cela produit un vidage hexadécimal des données; il y a un blanc à la fin, mais aucun au milieu.

0x0000: E0 A4 9A E0 A5 8C E0 A4 B0 E0 A5 87 E0 A4 89 E0 ................ 
0x0010: A4 A4 E0 A5 8D E0 A4 A4 E0 A4 AE E0 A4 AF E0 A4 ................ 
0x0020: BE E0 A4 A6 E0 A4 B5 20 0A      ....... . 
0x0029: 

Et la deuxième commande décode les données UTF-8:

echo "चौरेउत्तमयादव " | utf8-unicode 

Il produit:

0xE0 0xA4 0x9A = U+091A 
0xE0 0xA5 0x8C = U+094C 
0xE0 0xA4 0xB0 = U+0930 
0xE0 0xA5 0x87 = U+0947 
0xE0 0xA4 0x89 = U+0909 
0xE0 0xA4 0xA4 = U+0924 
0xE0 0xA5 0x8D = U+094D 
0xE0 0xA4 0xA4 = U+0924 
0xE0 0xA4 0xAE = U+092E 
0xE0 0xA4 0xAF = U+092F 
0xE0 0xA4 0xBE = U+093E 
0xE0 0xA4 0xA6 = U+0926 
0xE0 0xA4 0xB5 = U+0935 
0x20 = U+0020 
0x0A = U+000A 

Ainsi, il semble que votre problème est peut-être avec l'entrée 'toEscapedUnicode' plutôt qu'avec sa sortie.


En outre, il semble que ce que je Copy'n'Paste de la question ne correspond pas à ce que vous dites est dans la chaîne:

Yours  Mine 

\u0938 U+091A 
\u0941 U+094C 
\u0916 U+0930 
\u091A U+0947 
\u0948 U+0909 
\u0928 U+0924 
\u093E U+094D 
\u0928 U+0924 
\u0940 U+092E 
\u0020 
\u0930 U+092F 
\u0940 U+093E 
\u091D U+0926 
\u0941 U+0935 
\u092E 
\u0932 
\u0020 
\u091C 
\u093F 
\u0935 
\u0924 

Ainsi, le texte collé ne correspond pas à la traduction réclamée pour d'autres raisons aussi.


Je crois que la chaîne Unicode que vous spécifiez doit ressembler à:

सुखचैनानी रीझुमल जिवतराम

J'ai utilisé un fichier contenant les valeurs que vous prétendiez, moins les \u préfixes et 0020 à la place de les blancs:

0938 
0941 
0916 
091A 
0948 
0928 
093E 
0928 
0940 
0020 
0930 
0940 
091D 
0941 
092E 
0932 
0020 
091C 
093F 
0935 
0924 
0930 
093E 
092E 

Et puis j'ai utilisé ce script Perl home-brew pur pour générer la chaîne UTF-8 que je propose comme l'équivalent de votre chaîne Unicode échappée. Je suis sûr qu'il existe des mécanismes disponibles dans Perl pour le faire autrement (en utilisant des modules liés à Unicode), mais cela a fonctionné pour moi. Il serait moins bavard si je ne quittais pas le code de débogage là-bas):

#!/bin/perl -w 

use strict; 
use constant debug => 0; 

while (<>) 
{ 
    chomp; 
    my $i = hex; 
    printf STDERR "0x%04X = %4d\n", $i, $i if debug; 
    if ($i < 0x100) 
    { 
     # 1-byte UTF-8 
     printf STDERR " 0x%02X (%3d)\n", $i, $i if debug; 
     printf "%c", $i; 
    } 
    elsif ($i < 0x800) 
    { 
     # 2-byte UTF-8 
     my($b1) = 0xC0 | (($i >> 6) & 0xFF); 
     my($b2) = 0x80 | ($i & 0x3F); 
     printf STDERR " 0x%02X (%3d)\n", $b1, $b1 if debug; 
     printf STDERR " 0x%02X (%3d)\n", $b2, $b2 if debug; 
     printf "%c%c", $b1, $b2; 
    } 
    elsif ($i < 0x10000) 
    { 
     # 3-byte UTF-8 
     my($b1) = 0xE0 | (($i >> 12) & 0xFF); 
     my($b2) = 0x80 | (($i >> 6) & 0x3F); 
     my($b3) = 0x80 | ($i  & 0x3F); 
     printf STDERR " 0x%02X (%3d)\n", $b1, $b1 if debug; 
     printf STDERR " 0x%02X (%3d)\n", $b2, $b2 if debug; 
     printf STDERR " 0x%02X (%3d)\n", $b3, $b3 if debug; 
     printf "%c%c%c", $b1, $b2, $b3; 
    } 
    else 
    { 
     # 4-byte UTF-8 or error 
     die "Oh bother!"; 
    } 
} 
print "\n"; 

Vous pouvez remplir le UTF-8 4 octets et des trucs de gestion des erreurs. Je ne diagnostique pas les séquences UTF-8 invalides (notamment les substituts UTF-16), donc si vous placez des faux points de données Unicode, vous obtiendrez de fausses valeurs UTF-8 hors du script.Si vous avez besoin d'en savoir plus à ce sujet, lisez le chapitre 3 du livre Unicode (disponible en téléchargement - en tant que chapitre - de Unicode.org) ou le FAQ - UTF-8, UTF-16, UTF-32 and BOM.

+0

puis-je savoir quel outil est utilisé pour la commande "echo" चौरेउत्तमयादव "| utf8-unicode" –

+0

@Pangea: il s'agit d'un programme homebrew C. Si vous souhaitez l'obtenir, contactez-moi - voir mon profil pour mon adresse e-mail. –

0

J'ai eu la même situation où je devais afficher les données quelque chose comme ceci "\ U0928 \ U093e \ U0936 \ U092a \ U093e \ U0924 \ U0940", qui doit être नाशपाती

je recherche un lot pour convertir mais la réponse que j'ai trouvée moi-même était très simple. &

Seulement je devais mettre la chaîne donnée provenant de JSON dans UILabel ou tout ce que vous voulez. Dans mon cas, il était quelque chose comme ceci:

let meaning = array[indexPath.row] as! NSDictionary 
cell.textLabel?.text = meaning.value(forKey: "key") as? String 
Questions connexes