2010-03-04 14 views
2

对于这个词चौरेउत्तमयादव的Unicode是==> \u0938\u0941\u0916\u091A\u0948\u0928\u093E\u0928\u0940 \u0930\u0940\u091D\u0941\u092E\u0932 \u091C\u093F\u0935\u0924\u0930\u093E\u092EUnicode是没有空格

,并期待它之前\u0930\u091C

有空格但是,当我在我的代码我试图

String tempString=Strings.toEscapedUnicode(strString); 

这种转换为Unicode的方法给出了一个没有空格的结果: \u0938\u0941\u0916\u091A\u0948\u0928\u093E\u0928\u0940\u0930\u0940\u091D\u0941\u092E\u0932\u091C\u093F\u0935\u0924\u0930\u093E\u092E

这就是为什么他们不匹配。 我的'toEscapeUnicode'方法生成不带空格的Unicode。 我想要空格,那么该怎么做呢?

+1

您可能需要确定您所使用的编程语言(脚本是Devanagiri)。你写了'toEscapedUnicode'函数吗?如果是这样,我们需要看到它有任何解决问题的机会。 – 2010-03-04 14:24:42

回答

2

这不是一个完整的答案,但...当我copy'n'paste中的Unicode字符“चौरेउत्तमयादव”,然后使用一对夫妇的工具来分析那里的东西,我没有看到任何空格:

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

这会产生数据的十六进制转储;最后有一个空白,但没有一个在中间。

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: 

第二个命令解码UTF-8的数据:

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

它产生:

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 

所以,看来你的问题可能是与输入到 'toEscapedUnicode'而不是其产出。


而且,似乎有什么我从问题copy'n'paste不匹配,你说的是在字符串中

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 

因此,粘贴的文本不匹配因其他原因也声称翻译。


我相信,您所指定的Unicode字符串应该是这样的:

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

我使用含有你要求的值的文件,减去\u前缀与0020代替空白:

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

然后我用这个纯家酿brew脚本来生成我建议将UTF-8字符串作为您的转义Unicode字符串的等效字符串。我相信在Perl中有其他机制可以使用(使用与Unicode相关的模块),但这对我很有用。这将是更简洁,如果我没有在那里留下的调试代码):

#!/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"; 

您可以在4个字节的UTF-8和错误处理的东西填满。我不诊断无效的UTF-8序列(特别是UTF-16替代品),所以如果你把伪造的Unicode数据点放进去,你会得到伪造的UTF-8值。如果您需要了解更多信息,请阅读Unicode书籍的第3章(可下载 - 作为章节 - 从Unicode.org)或FAQ - UTF-8, UTF-16, UTF-32 and BOM

+0

我可以知道什么工具被用于“回声”चौरेउत्तमयादव“| utf8-unicode”命令 – 2010-12-27 04:01:11

+0

@Pangea:这是一个自制的C程序。如果你想获得它,请联系我 - 查看我的个人资料以查找我的电子邮件地址。 – 2010-12-27 04:18:30

0

我有类似的情况下,我不得不显示的数据是这样的 “\ U0928 \ U093e \ U0936 \ U092a \ U093e \ U0924 \ U0940”,它必须是नाशपाती

我搜索了很多转换但是,我发现自己的答案非常简单,只需要简单的&。

只有我不得不把给定的字符串从JSON到UILabel或任何你想要的。 对我来说,它是这样的:

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