web-dev-qa-db-ja.com

テキストファイルエンコーディングの変換

文字エンコードの問題のあるテキストファイル(母国語の字幕ファイル、 ペルシャ語 など)に頻繁に遭遇します。これらのファイルはWindowsで作成され、不適切なエンコード(ANSIのようです)で保存されます。

enter image description here

Windowsでは、次のように Notepad ++ を使用してエンコードをUTF-8に変換することで、これを簡単に修正できます。

enter image description here

そして、読み取り可能な正しい結果は次のようになります。

enter image description here

GNU/Linuxで同様の解決策をたくさん検索しましたが、残念ながら提案された解決策(例 この質問 )は機能しません。何よりも、iconvrecodeが提案されるのを見たことがありますが、これらのツールには運がありませんでした。以下を含む多くのコマンドをテストしましたが、すべて失敗しました。

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 

これらのどれも機能しませんでした!

Ubuntu-14.04を使用していますが、Notepad ++と同じように機能するシンプルなソリューション(GUIまたはCLI)を探しています。

"simple"であることの1つの重要な側面は、ユーザーがソースエンコーディングを決定する必要がないことです。むしろ、ソースエンコーディングはツールによって自動的に検出され、ターゲットエンコーディングのみがユーザーによって提供される必要があります。しかし、それでも、ソースエンコーディングの提供を必要とする実用的なソリューションについて知りたいと思います。

さまざまなソリューションを調べるためにテストケースが必要な場合、上記の例にアクセスできます このリンクを介して

14
Seyed Mohammad

私が見つけた実用的なソリューションは、フリーウェアでLinuxで利用可能な Microsoft Visual Studio Code テキストエディターを使用していることです。

VS-Codeでエンコードを変換するファイルを開きます。ウィンドウの下部には、いくつかのボタンがあります。それらの1つは、以下に示すように、ファイルエンコーディングに関連しています。

enter image description here

このボタンをクリックすると、2つのアイテムを含むオーバーヘッドメニューがポップアップ表示されます。このメニューから、以下のように「エンコードで再開」オプションを選択します。

enter image description here

これにより、以下に示すように、異なるエンコードのリストを含む別のメニューが開きます。 「アラビア語(Windows 1256)」を選択します:

enter image description here

これにより、このような意味不明なテキストが修正されます。

enter image description here

エンコードボタンをもう一度クリックし、今度は「エンコード付きで保存」オプションを選択します。次のとおりです。

enter image description here

そして、新しいメニューで「UTF-8」オプションを選択します。

enter image description here

これにより、UTF-8エンコードを使用して修正されたファイルが保存されます。

enter image description here

できた! :)

0
Seyed Mohammad

ペルシャ語のテキストを含むこれらのWindowsファイルは、Windows-1256でエンコードされます。そのため、OPに似たコマンドで解読できますが、文字セットが異なります。すなわち:

recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(元のポスターの苦情に対して非難。コメントを参照)

iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt

これは、LANG環境変数がUTF-8ロケールに設定されていることを前提としています。現在のロケールに関係なく、任意のエンコーディング(UTF-8など)に変換するには、次のように言えます。

iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}

元のポスターは、テキスト再コーディングツールのセマンティック(recode、iconv)と混同されます。ソースエンコーディング(source..または-f)の場合、ファイルのエンコーディングを指定する必要がありますsaved(それを作成したプログラムによって)。読み込もうとする(しかし失敗する)プログラムの文字文字に基づいた(ナイーブな)推測はありません。ペルシャ語のテキストに対してISO-8859-15またはWINDOWS-1252を試すことは明らかに行き詰まりでした。これらのエンコーディングにはペルシャ語の文字が含まれていません。

11
Incnis Mrsi

CLIの代わりにGUIで作業するのが好きなら、私がそうするように:

  1. Geany(エディター)でファイルを開く
  2. File menu-> Reload asに移動します
  3. 想定されるエンコーディングを選択して、意味不明な文字を言語の識別可能な文字に変更します。たとえば、ギリシャ語の潜水艦を読むには、西ヨーロッパ-> ギリシャ語(Windows-1253)としてリロードします
  4. ドキュメントメニュー> エンコードの設定-> nicode-> TF-8に移動します
  5. セーブ
1
Christos

この問題を補完する解決策として、 Incnis Mrsiの答え からのiconvコマンドに基づいた便利なBashスクリプトを用意しました。

#!/bin/bash

if [ $# -lt 1 ]
then
   echo 'Specify at least one file to fix.'
   exit 1
fi

# Temp file to store conversion attempt(s).
tmp='tmp.fixed'

for file in "$@"
do
  # Try to fix the file encoding.
  if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
    echo "Fixed: '$file'"
    cat $tmp > "$file"
  else
    echo "Failed to fix: '$file'"
  fi
done
rm $tmp

このスクリプトをfix-encoding.shとして保存し、chmod +x fix-encoding.shを使用して実行権限を付与し、次のように使用します。

./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub

このスクリプトは、入力として提供される任意の数のファイルのエンコードを修正しようとします。ファイルはその場で修正されるため、内容は上書きされます。

1
Seyed Mohammad

単独またはスクリプトで非常に便利なツールであるiconvの他に、ギリシャ文字セット(Windows-1253 + ISO-8859-7 )。

あなたがする必要があるのは、テキストファイルを開くことですGeditの「開く」ダイアログを介してそれをダブルクリックすることではありません。ダイアログボックスの下部に、 "Automatically Detected"に設定されたEncodingのドロップダウンがあります。 「Windows-125x」またはその他の適切なコードセットに変更すると、Geditでテキストが完全に読み取り可能になります。その後、UTF-8エンコードを使用して保存し、将来同じ問題が発生しないことを確認してください...

1
Giorgos_tph

これがペルシア語で機能するかどうかはわかりません:Geditを使用していますが、間違ったエンコーディングでエラーが発生し、UTF-8に変換したいものを選択できます。 !

enter image description here

申し訳ありませんが、ようやくテキストファイルを取得できたので、すべて変換されました。

私もnotepad ++が大好きで、まだ恋しいです。

1
Ken Mollerup