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


15

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

そして、読み取り可能な正しい結果は次のとおりです。

ここに画像の説明を入力してください

GNU / Linuxで同様のソリューションを探してみましたが、残念ながら提案されたソリューション(この質問など)は機能しません。何よりも、私は人々が提案するのiconvを見てきましたrecodeが、これらのツールには運がありませんでした。以下を含む多くのコマンドをテストしましたが、すべて失敗しました。

$ 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)を探しています。

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

別のソリューションを調べるためにテストケースが必要な場合は、このリンクから上記の例にアクセスできます。


2
試してくださいvim '+set fileencoding=utf-8' '+wq' file.txt
ムル

ペルシア語はする必要がありますiso-639が、そのいずれかで利用可能であるように思えませんiconvrecode。少なくとも、の出力には表示されませんiconv -l
テルドン

@muruあなたの提案をテストしましたが、うまくいきvimませんでした。
セイドモハマド

@SeyedMohammadはまだ同じように見えましたか?

@muruうん!変化なし。
セイドモハンマド

回答:


12

ペルシャ語のテキストを含むこれらの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)の場合、ファイル(それを作成したプログラムによって)保存するエンコーディングを指定する必要があります。読み込もうとする(しかし失敗する)プログラムの文字文字に基づいた(ナイーブな)推測はありません。ペルシャ語のテキストにISO-8859-15またはWINDOWS-1252を試すことは明らかに行き詰まりでした。これらのエンコーディングにはペルシャ文字が含まれていません。


@Seyed Mohammad:明示的にコマンドが指定されました。
Incnis Mrsi

ありがとう!2番目のコマンド(を使用するコマンドiconv)は機能しました。しかし、最初のもの(を使用recode)は正しく機能せず、出力はまだ意味不明です。回答を編集してiconvコマンドのみを含めると、回答としてマークします。
セイドモハマド

1
また、LANG変数の設定から解放するために、次のことができますiconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt。したがって、このようにコマンドを編集することをお勧めします。
セイドモハンマド

私はここで別の答えで説明した作業コマンドに基づいて有用なスクリプトを書きました。他のペルシャのLinuxユーザーが私を大いに助けてくれることを願っています。
セイドモハマド

@karel:ありがとう、「文句を言う」は動詞です。フレーズは文法的に書かれていません。
Incnis Mrsi

1

の他に iconv単独でまたはスクリプトで非常に便利なツールであるギリシャ文字セット(Windows-1253 + ISO-8859-7)で同じ問題を見つけようとする非常に簡単な解決策があります。

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


1

この問題を補完する解決策として、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

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


変数はダブルテキストとオープンテキストで展開されるため、  …  から$ fileを削除する必要はありません。'$ file'のみが、bashによって文字通りドル記号付きでレンダリングされます。
Incnis MRSI

「Incnis Mrsi」が投稿した回答への回答で述べたように、このソリューションは機能しませんでした。したがって、このスクリプトも機能しません。
セイドモハマド

1

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

ここに画像の説明を入力してください

申し訳ありませんが、ようやくテキストファイルにアクセスできたため、すべて変換されました。

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


Geditは問題を解決できません。Geditは私のファイルのエンコードエラーを表示しませんが、それを修正しても修正できません。また、GeditでUTF-8エンコーディングを使用して「名前を付けて保存」を試みましたが、問題は解決しません。
セイドモハマド

1

CLIの代わりにGUIで作業するのが好きな場合は、次のようにします。

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

動作しません..
Aurimas

0

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

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

できた! :)


「エンコーディングを指定して保存」を試みましたが、以前のエンコーディングagian、私の場合はそのUTF8を示しています
chaitanya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.