web-dev-qa-db-ja.com

ウエスタンエンコーディング(ISO-8859-1)でエンコードされたテキストファイルの読み取りに関する問題

ISO-8859-1テキストファイル(ポーランド語の字幕)のエンコードに問題があります。これは次のようになります。

Mieszka³sam、|¿adnej¿ony、dzieci。

「Mieszkałsam、żadnejżony、dzieci」である必要があります。

私はもう試した:

  • iconvを使用してテキストファイルをUTF-8に変換する
  • meditを使用してエンコーディングをUTF-8に変更します。
  • システム言語をポーランド語に変更する(システム言語で英語のロケールを使用していますが、ポーランド語のキーボード設定を使用しています)

ArchLinuxディストリビューションを使用しています。ケースに影響を与える可能性があるため、ロケールに関する情報を記載します。

locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pl_PL.UTF-8
LC_TIME=pl_PL.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pl_PL.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pl_PL.UTF-8
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT=pl_PL.UTF-8
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

ご回答ありがとうございます。

3
mordowiciel

ポーランド語の標準の8ビットエンコーディングは latin2 a.k.a. ISO 8859-2 です。 łは³、żは¿などのテキストは、latin2のテキストを表すバイトシーケンスを、latin1を表すかのように解釈した結果です。 Latin1 a.k.a. ISO 8859-1は、ほとんどの西ヨーロッパ言語の標準エンコーディングです。

テキストがlatin2でエンコードされている場合は、latin1からUTF-8ではなく、latin2からUTF-8に変換する必要があります。

iconv -f latin2 -t utf8

-t utf8は、UTF-8ロケールを呼び出しているため、ここではオプションです。)

表示しているのがテキストを読んでいる場合は、ある時点で8ビットからUnicodeに正しく変換されていないことを意味します。これを修正するには、元のバイトに変換してから、それらをエンコードに変換します。

iconv -f utf8 -t latin1 | iconv -f latin2 -t utf8

私は解決策を見つけました。同じ問題を抱えている他の人々に役立つかもしれないので、ここに答えを残しておきます。

別のエンコーディングを使用してテキストファイルを開きます!私(ポーランド語)にとっては、CP1250(中央ヨーロッパ)でした。これを行うには、geditを開き、[開く]オプションを選択して、必要なファイルを見つけます。次に、文字エンコード(左下)を選択し、「WINDOWS-1250」を選択します。

映画の字幕に関連しているため、映画で字幕を実行する前に毎回手動でエンコードを変更する必要はありません。ほとんどすべてのビデオプレーヤーには、デフォルトの字幕エンコーディングを選択するオプションがあります。ポーランド語の場合は、Windows-1250を選択するだけで、アプリケーションは字幕をそのコーディングでエンコードされているかのように読み取ります。

とにかく、Gillesの助けに感謝します!

1
mordowiciel