完全な答えではありませんが、... 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をお読みください。