2

私の命名法が正しいかどうか確信が持てないので、訂正してください:)

パーリ語辞書を表すテキスト ファイルを受け取りました。改行\n(0x0a) 文字で区切られた単語のリストです。おそらく、特殊文字のいくつかは UTF-8 を使用してエンコードされていると思われますが、私はそうは思いません。

このテキスト ファイルを任意のエディター (vim、メモ帳、TextEdit など) に読み込むと、次のように非常に乱雑なテキストが表示されます。

mhiti

実際のバイトを詳しく見てみると、次のことが明らかになります ( を使用hexdump -C) 。

0a 0a 1e 6d 68 69 74 69 0a 0a  ...mhiti..

これは私にはUnicodeコードポイントU+1E6D(「ṭ」またはLATIN SMALL LETTER T WITH DOT BELOW)のようです。その特定の文字には UTF-8 エンコーディングがありe1 b9 adます。

私の質問: この特定のファイルを実際の UTF-8 エンコーディングに変換するのに役立つツールはありますか? 私は試みiconvましたが成功しませんでした。Python スクリプトを簡単に調べましたが、これを行うためのより簡単な方法があると思います。これはこの問題の便利なリンクのようですが、これを実行できるツールはありませんか? 何か不足していますか?

編集:物事をもう少し面白くするために、実際の UTF-8 でエンコードされた文字もあちこちに散らばっているようです。たとえば、「ākiñcaññāyatana」という単語は、次のバイト シーケンスを持ちます。

01 01 6b 69 c3 b1 63 61 c3 b1 c3 b1 01 01 79 61 74 61 6e 61
ā     k  i  ñ     c  a  ñ     ñ     ā     y  a  t  a  n  a

ここで、"ā" は Unicode コード ポイント U-0101 によってエンコードされ、"ñ" は Unicode コード ポイント U-00F1 を持つ UTF-8 シーケンス \xc3b1 によってエンコードされます。

編集:これは、それがどうあるべきかよくわからないものです:

01 1e 37 01 01 76 61 6b 61
?        ā     v  a  k  a

推測することしかできませんが、それも意味がありません。Unicode コード ポイント U+011e は "Ğ" (UTF-8 \xc49e) ですが、これはパーリ語の文字ではありません。次に「7」が続きますが、これは一言では意味がありません。次に、Unicode コード ポイント U+1E37 は、有効なパーリ文字である "ḷ" (UTF-8 \xe1b8b7) です。しかし、それでは最初のバイト \x01 だけが残ります。推測すると、これは「Jīvaka」という名前だと思いますが、バイトとは一致しません。 LATER:著者によると、これは「Āḷāvaka」です — したがって、上記の文字エンコーディングのヒューリスティックを仮定すると、ここでも \x00 が欠落しています。追加して戻す

01 00 1e 37 01 01 76 61 6b 61
Ā     ḷ     ā     v  a  k  a

UTF-16 でエンコードされた Unicode ファイルから \x00 バイトを削除する「圧縮」はありますか?

4

2 に答える 2

3

この文脈では、「ṭhiti」がそのファイルの内容として意味があると仮定しています。

あなたの説明から、そのファイルは文字 < U+0080 を 1 バイトとしてエンコードし、文字 > U+0100 を 2 バイトのビッグエンディアンとしてエンコードしているようです。一般に、これはデコードできません。2 つの改行 (U+000A、U+000A) は、GURMUKHI LETTER UU (U+0A0A) と同じエンコードになります。

iconvあなたのためにそれをデコードする呼び出しはありません。カスタムデコーダーを作成するには、文字範囲またはファイル内の順序に基づいて、既知のヒューリスティックを使用する必要があります (または、標準エンコーディングで別のコピーを要求します)。

于 2013-04-02T13:04:15.993 に答える
1

結局、これは自分のせいだと思います。このファイルを参照すると、元の UTF-16 でエンコードされたファイルの非常に壊れたバージョンが表示されました。ブラウザの「名前を付けて保存」メニューは、このスレッドの最初の質問を作成した壊れたファイルを保存しました。

Web ブラウザは、その UTF-16 でエンコードされたファイルを表示しようとして、\x00 などの印刷できない文字を削除し、その他の文字を UTF-8 に変換して、元のファイルを完全に破壊しているようです。

を使用wgetしてファイルをフェッチすることで問題が解決し、うまく UTF-8 に変換してさらに使用することができました。

于 2013-04-05T12:08:30.630 に答える