0

私は最近、いくつかの破損した UTF-8 文字列が ISO-Latin-1 であると思われるものに変換されていることに遭遇しました。実際に破棄され、実際に失われるビットはありません。

基本的に、このようなものは一連の文字を取り、それらの同じビットが utf-8 または他のエンコーディングとして表示された場合の文字列を表示します。そのようなツールは存在しますか?(自分で何かを作成するのは簡単で、手動で行うのも簡単だとわかっているので、本当に何もない場合はおそらくそうします。)

明確にするために:私が抱えている特定のケースは、特定のフォーラムでテキストエディターがutf-8文字を許可するということですが、フォーラム自体はutf-8文字の個々のバイトに対応する文字を表示します.

文字 U+0000 から U+007F の場合、まったく同じ文字ですが、次のようになります。

  • U+0080 から U+07FF までの文字は、U+00C0 から U+00DF までの 1 文字と、その後に U+0080 から U+00BF までの 1 文字として表示されます。
  • U+0800 から U+FFFF の文字は、代わりに U+00E0 から U+00EF の間の 1 文字として表示され、その後に U+0080 から U+00BF の間の 2 文字が続きます。

等々...

したがって、"â�¦" は実際には文字 U+2xy6 として表示されるはずです (x は "�" の中間の 4 ビット、y は "�" の最後の 2 ビットに "10" を加えたものです)。

U+0080 から U+00BF までの文字のうち、どの文字が「�」であるかはまだ正確にはわかりませんが。

私がやろうとしているのは、UTF-8 文字列の文字の ISO-Latin-1 ビット値をすべて取得し、それらをすべて連結して、結果のビット シーケンスを UTF-8 エンコード文字が含まれているかのように解釈することです。

4

2 に答える 2

1

申し訳ありませんが、これはあまり意味がありません。:)

シナリオ 1: UTF-8 と Latin1 の両方で有効な文字を含む"Héllö wörld"のような文字列は、UTF-8 から Latin1 に適切に変換されました: 問題ありません。今すぐ Latin1 で解釈する必要があります。

シナリオ 2: UTF-8 では有効だが Latin1 では有効でない文字を含む"Hello 世界"のような文字列は、UTF-8 から Latin1 に適切に変換されました。この場合、Latin1 で表現できない文字は置き換えられた可能性があります。 by ?、つまり、文字列は"Hello ??"になります。そして、それについてあなたができることは何もありません。

シナリオ 3:あらゆる種類の文字を含み、UTF-8 として保存された"Héllö 世界"のような文字列が、想定される Latin1 から UTF-8 に変換されました。これは、文字が誤って解釈されていたことを意味しますが、適切にエンコードされた UTF-8: "Héllã¶ ä¸ç"になりました。この場合、エンコーディングを UTF-8 → Latin1 に逆にし、結果を UTF-8 として解釈して元に戻すことができます。

シナリオ 4: Latin1 文字を含み、Latin1 として保存された"Héllö Wörld"のような文字列が、UTF-8 として誤って解釈され、UTF-8 として保存された場合、現在は"H�ll� W�rld"になっています。この文字列は現在、回復できません。

何が起こったのかには、さらに多くの可能な組み合わせがあります。これ以上の情報がなければ、何ができるか、何ができないかを正確に伝えることは不可能です。まず第一に、文字列を正しく解釈していることを確認してください。これは単なる表示上の問題ではありません。

そこに「�」が表示されているという事実は、何かを UTF-8 として解釈しようとしていることを示していますが、UTF-8 デコーダーはこれらの文字を理解できず、「�」に置き換えます。これはあなたのせいでデータは問題ないか、シナリオ 4 のどちらかです。

于 2012-11-05T17:23:58.440 に答える
0

UTF8 -> latin1 は残念ながら不可逆です。latin1 として解析される UTF8 -> UTF8 はそうではありません。これはあなたの場合だと思います。もしそうなら、次のようにLinuxで逆にすることができます:

iconv -f utf8 -t iso-8859-1 < bad.file.latin1 > good.file.utf8

中間変換が cp1252 のような不可逆なものであった場合、プロセスはより複雑になり、次のようなものが必要になります。

http://www.pixelbeat.org/docs/unicode_utils/

于 2012-11-05T17:07:32.543 に答える