2

この単語 चौरेउत्तमयादव の 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 を生成します。スペースが欲しいのですが、どうすればいいですか?

4

2 に答える 2

2

完全な答えではありませんが、... Unicode 文字 "चौreyउत्तमयादव" をコピーして貼り付け、いくつかのツールを使用してそこにあるものを分析すると、スペースが表示されません。

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

これにより、データの 16 進ダンプが生成されます。最後に空白がありますが、真ん中にはありません。

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:

2 番目のコマンドは、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」への入力にあるようです。


また、質問からコピーして貼り付けたものが、文字列にあるとあなたが言っていることと一致しないようです:

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 文字列は次のようになるはずです。

続きを読む</p>

あなたが主張した値を含むファイルを使用し、\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 スクリプトを使用して、エスケープされた Unicode 文字列に相当するものとして提案する UTF-8 文字列を生成しました。それ以外の方法で(Unicode関連のモジュールを使用して)Perlで利用できるメカニズムがあると確信していますが、これは私にとってはうまくいきました。そこにデバッグコードを残さなければ、冗長ではなくなります):

#!/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をお読みください。

于 2010-03-04T15:44:16.007 に答える
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
于 2017-09-14T12:03:26.410 に答える