对于这个单词चौरेउत्तमयादवUnicode是==>
\u0938\u0941\u0916\u091A\u0948\u0928\u093E\u0928\u0940 \u0930\u0940\u091D\u0941\u092E\u0932 \u091C\u093F\u0935\u0924\u0930\u093E\u092E
并查看它在\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。 我想要这些空间,那该怎么做?
答案 0 :(得分:2)
这不是一个完整的答案,但是...当我复制'n'拼写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'的输入,而不是输出。
此外,似乎我从问题中复制'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
然后我使用这个纯粹的自制Perl脚本生成我建议的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。
答案 1 :(得分:0)
我有类似的情况,我必须显示这样的数据 “\ U0928 \ U093e \ U0936 \ U092a \ U093e \ U0924 \ U0940”必须是नाशपाती
我搜索了很多东西来转换它,但我自己发现的答案非常简单&amp;容易。
只有我必须将来自JSON的给定字符串放入UILabel或任何你想要的东西。 就我而言,它是这样的:
let meaning = array[indexPath.row] as! NSDictionary
cell.textLabel?.text = meaning.value(forKey: "key") as? String