web-dev-qa-db-ja.com

テキストファイルを文字セット間で変換する最良の方法は?

文字セット間でテキストファイルを変換するための最速、最も簡単なツールや方法は何ですか?

具体的には、私はUTF-8からISO-8859-15に、またその逆に変換する必要があります。

好きなスクリプト言語のワンライナー、OS用のコマンドラインツールやその他のユーティリティ、Webサイトなど。

これまでの最善の解決策:

Linux/UNIX/OS X/cygwinの場合

  • Troels Arvin によって提案されたGnu iconv が最も使用されます フィルタとして 。それは普遍的に利用可能であるようです。例:

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
    

    Ben で指摘されているように、 iconvを使ったオンラインコンバータ があります。

  • Cheekysoft によって提案されたGnu recodemanual )は変換します 1つまたは複数のファイルをインプレース 。例:

    $ recode UTF8..ISO-8859-15 in.txt
    

    これは短いエイリアスを使用します。

    $ recode utf8..l9 in.txt
    

    Recodeは surface もサポートしています。これは、異なる行末タイプとエンコーディングの間の変換に使用できます。

    改行をLF(Unix)からCR-LF(DOS)に変換します。

    $ recode ../CR-LF in.txt
    

    Base64エンコードファイル:

    $ recode ../Base64 in.txt
    

    それらを組み合わせることもできます。

    Unixの行末を持つBase64エンコードUTF8ファイルを、DOSの行末を持つBase64エンコードLatin 1ファイルに変換します。

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

Powershell (({ Jay Bazuzi )を指定したWindowsの場合)

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (ISO-8859-15はサポートされていません。サポートされている文字セットはUnicode、utf7、utf8、utf32、ascii、bigendianunicode、default、およびoemです。)

編集する

Iso-8859-1をサポートしていますか? "String"を使用するとこれが可能になります。その逆

gc -en string in.txt | Out-File -en utf8 out.txt

注:可能な列挙値は「不明、文字列、Unicode、Byte、BigEndianUnicode、UTF 8、UTF 7、ASCII」です。

495

スタンドアロンユーティリティ approach

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

どちらの引数も指定する必要はありません。デフォルトは現在のロケールになります。通常はUTF-8です。

220
Troels Arvin

VIMを試す

vimがあればこれを使うことができます:

すべてのエンコードに対してテストされているわけではありません。

これについてのクールな部分は、あなたがソースエンコーディングを知る必要がないということです。

vim +"set nobomb | set fenc=utf8 | x" filename.txt

このコマンドはファイルを直接変更します。


説明部分!

  1. +:ファイルを開くときに直接コマンドを入力するためにvimによって使用されます。通常、特定の行でファイルを開くのに使用します。vim +14 file.txt
  2. |:複数のコマンドの区切り文字(bashの;のように)
  3. set nobomb:いいえutf-8 BOM
  4. set fenc=utf8:新しいエンコーディングをutf-8に設定します doc link
  5. x:ファイルを保存して閉じる
  6. filename.txt:ファイルへのパス
  7. ":パイプのせいで投票はここにあります。 (それ以外の場合、bashはそれらをbashパイプとして使用します)
80
Boop

Linuxでは、非常に強力な recode コマンドを使用して、さまざまな文字セットや行末の問題を変換してみることができます。 recode -l は、ツールが変換できるすべての形式とエンコーディングを表示します。それは非常に長いリストになるでしょう。

36
Cheekysoft

iconv(1)

iconv -f FROM-ENCODING -t TO-ENCODING file.txt

Iconvベースのツールも多くの言語であります。

20
Daniel Papasian
Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

入力BOMが正しいと想定できる場合は、最短のバージョン:

gc FILE.TXT | Out-File -en utf7 file-utf7.txt
19
Jay Bazuzi

Iconv Bash関数を試す

これを.bashrcに入れました:

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

..ファイルを次のように変換することができます。

utf8 MyClass.Java
16
Arne Evertsson

Notepad ++をお試しください

Windowsでは、Notepad ++を使って ISO-8859-1 から UTF-8 への変換を行うことができました。 "Encoding"をクリックしてから"Convert to UTF-8"をクリックします。

13
Jeremy Glover

自動検出機能付きの検索を使用したOneliner

一致するすべてのテキストファイルの文字エンコーディング自動的に検出されるすべての一致するテキストファイルはutf-8エンコーディングに変換されます。

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

これらの手順を実行するには、サブシェルsh-execと共に使用し、-cフラグを指定してワンライナーを実行し、"$1"を付けて位置引数-- {}としてファイル名を渡します。その間のutf-8出力ファイルは一時的にconvertedという名前になります。

ここで file -bi は、

  • -b、 - brief
    出力行の前にファイル名を追加しません(簡潔モード)。

  • -i、 - mime
    fileコマンドは、より伝統的な人間が読める形式の文字列ではなく、MIMEタイプの文字列を出力します。したがって、それは「text/plain」と言うことができます。 「ASCIIテキスト」ではなくcharset = us-ascii」.

findコマンドは、このようなファイル管理の自動化に非常に役立ちます。

more findの詳細はこちら .

9

PHP iconv()

iconv("UTF-8", "ISO-8859-15", $input);

3
user15096

DOS/Windows: コードページ を使用

chcp 65001>NUL
type ascii.txt > unicode.txt

コードページを変更するには、コマンドchcpを使用します。コードページ65001は、MicrosoftのUTF-8の名前です。コードページを設定した後、次のコマンドで生成される出力はコードページセットになります。

2
lalthomas

通常、プロパティファイル(Java)を書くために、私はこれをlinux(mintおよびubuntuディストリビューション)で使用します。

$ native2ascii filename.properties

例えば:

$ cat test.properties 
first=Execução número um
second=Execução número dois

$ native2ascii test.properties 
first=Execu\u00e7\u00e3o n\u00famero um
second=Execu\u00e7\u00e3o n\u00famero dois

シモンズ:私は特殊文字を強制するためにポルトガル語で実行番号1/2を書いた。

私の場合、最初の実行で私はこのメッセージを受け取りました:

$ native2ascii teste.txt 
The program 'native2ascii' can be found in the following packages:
 * gcj-5-jdk
 * openjdk-8-jdk-headless
 * gcj-4.8-jdk
 * gcj-4.9-jdk
Try: Sudo apt install <selected package>

最初のオプション(gcj-5-jdk)をインストールしたとき、問題は解決しました。

これが誰かに役立つことを願っています。

1

私のお気に入りのツールはJedit(Javaベースのテキストエディタ)です。これには2つの非常に便利な機能があります。

  • ユーザーが異なるエンコーディングでテキストをリロードすることを可能にするもの(そしてその結果として、結果を視覚的に制御すること)
  • ユーザーが保存する前に明示的にエンコーディング(および行末文字)を選択できるようにするもう一つの方法
0
yota

このPythonスクリプトを使用してください。 https://github.com/goerz/convert_encoding.py 任意のプラットフォームで動作します。 Python 2.7が必要です。

0
kinORnirvana

Rubyの場合:

Ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))"

ソース: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences

0
Dorian

IntelliJ IDEA IDEのロードされたファイルのエンコーディングを、現在の文字セットが表示されているステータスバーの右側(下)に変更するだけです。再読み込みまたは変換を促すメッセージが表示されます。変換を使用してください。必ず元のファイルをバックアップしてください。

0