web-dev-qa-db-ja.com

ファイルの文字エンコードを修正するにはどうすればよいですか?

ANSIでサポートされていないアクセント記号付きの文字があったため、ANSIとしてエンコードされるべきではなかったANSIエンコードされたテキストファイルがあります。むしろUTF-8で作業したいです。

データを正しくデコードできますか、またはトランスコーディングで失われますか?

どのツールを使用できますか?

ここに私が持っているもののサンプルがあります:

ç é

コンテキストから(カフェはカフェである必要があります)、これらは次の2つの文字であることがわかります。

ç é
45
Liam

編集:より複雑な解決策に入る前に排除する簡単な可能性:ファイルを読んでいるテキストエディターで文字セットをutf8に設定しようとしましたか?これは、誰かがcp1252と言うように設定されたエディターで読んでいるutf8ファイルをあなたに送信した場合にすぎません。

2つの例を挙げると、utf8がiso-8859-1、iso-8859-15、またはcp1252のいずれかである可能性のあるシングルバイトエンコーディングのレンズを通して読み取られる場合です。他の問題のあるキャラクターの例を投稿できる場合、それをさらに絞り込むことができるはずです。

文字の視覚的検査は誤解を招く可能性があるため、基礎となるバイトも確認する必要があります。画面に表示される§は0xa7または0xc2a7のいずれかであり、これにより必要な文字セット変換の種類が決まります。

すべてのデータがまったく同じように歪んでいると仮定できますか?同じソースからのものであり、同じ変換シーケンスを経ているため、たとえばテキストに単一のéがない場合、常にç?その場合は、一連の文字セット変換で問題を解決できます。使用している環境と使用しているデータベースについてさらに詳しく説明できる場合は、おそらく誰かが適切な変換を実行する方法を教えてくれるでしょう。

それ以外の場合、問題の文字がデータ内の一部の場所でのみ発生する場合、「テキストにçを挿入することを意図した作成者はいないので、それは、çに置き換えてください。後者のオプションは、最初に著者の意図に関するそれらの仮定が間違っている可能性があるため、2番目に、すべての問題のキャラクターを自分で見つけなければならないため、より危険です。視覚的に検査するテキストが多すぎる場合や書かれている場合は不可能かもしれませんあなたにとって異質な言語または書記体系で。

19
user8599

Notepad ++で次の手順を実行します

1-元のテキストをコピーする

2- Notepad ++で、新しいファイルを開き、エンコーディングを変更->元のテキストが続くと思われるエンコーディングを選択します。特定のプログラムによってUnicodeファイルがANSIとして読み取られる場合があるため、エンコード「ANSI」も試してください。

3-貼り付け

4-次に、同じメニューに再度移動してUnicodeに変換します。エンコード->「UTF-8でエンコード」(「UTF-8に変換しない」)

上記の手順は、ほとんどの言語に適用されます。 notepad ++に貼り付ける前に元のエンコードを推測し、同じメニューを使用してUnicodeベースの代替エンコードに変換し、読みやすくなるかどうかを確認する必要があります。

ほとんどの言語は、2つの形式のエンコーディングで存在します。1-ほとんどのコンピューターで最初に使用されたのは8ビットのみの古いレガシーANSI(ASCII)形式です。 8ビットは256個の可能性のみを許可し、そのうち128個は通常のラテン文字と制御文字、最後の128ビットはPC言語設定に応じて異なる方法で読み取られました。現在知られているすべての言語と、今後さらに多くの言語で。ファイルがユニコードである場合、言語のフォントがインストールされているPCで認識される必要があります。 UTF-8でも最大32ビットであり、UTF-16およびUTF-32と同じくらい広いため、ディスク容量を節約するためにラテン文字で8ビットを維持しようとします。

21
Gabriel

çやéなどの文字シーケンスが表示される場合、通常は、UTF-8ファイルがANSI(または同様の)として読み込むプログラムによって開かれていることを示しています。次のようなUnicode文字:

U + 00C2曲折アクセント付きラテン大文字A
U + 00C3チルダ付きラテン大文字A
U + 0082休憩はここで許可されています
U + 0083ここで休憩なし

uTF-8が使用する可変バイト戦略のため、ANSIテキストに表示される傾向があります。この戦略は非常によく説明されています ここ

あなたにとっての利点は、これらの奇妙な文字の出現により、不正な変換のインスタンスを比較的簡単に見つけて置き換えることができることです。

ANSIは常に文字ごとに1バイトを使用するため、単純な検索と置換の操作でこの状況を処理できると思います。または、次のように、問題のシーケンスと目的の文字の間のテーブルマッピングを含むプログラムを使用すると便利です。

“->“#は二重引用符で始まる必要があります
â? ->”#閉じ二重引用符である必要があります

テキストが英語であると仮定すると、比較的少数の異なるタイプの置換があります。

お役に立てば幸いです。

8
gregory

コマンドラインからvimを使用する場合:

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
6
Zsolt Botykai
4
Troels Arvin

崇高なテキストエディターで、ファイル->エンコーディングで再度開く->正しいエンコーディングを選択します。

通常、エンコードは自動検出されますが、検出されない場合は上記の方法を使用できます。

2
user3342981

ファイル内に疑問符が表示されている場合、またはアクセントがすでに失われている場合、utf8に戻っても問題は解決しません。例えばカフェがカフェになった場合、エンコードのみを変更しても効果はありません(元のデータが必要になります)。

ここにテキストを貼り付けていただければ、確実に回答できます。

1
Deepak Gulati

そして、やや古い recode プログラムがあります。

0
unbeknown

ファイルエンコーディングを自動検出する簡単な方法を見つけました-ファイルをテキストファイルに変更し(Macではファイル拡張子を.txtに変更します)、それをMozilla Firefoxウィンドウ(または[ファイル]-> [開く])にドラッグします。 Firefoxはエンコーディングを検出します-View-> Character Encodingで何が出たかを見ることができます。

正しいエンコーディングがわかったら、TextMateを使用してファイルのエンコーディングを変更しました。ファイル->エンコードを使用して再度開き、エンコードを選択します。次に、ファイル->名前を付けて保存し、エンコーディングをUTF-8に変更し、行末をLF(または任意のもの)に変更します)

0
Mark Robinson

OS Xで Synalyze It! を使用すると、ファイルの一部を異なるエンコーディング(ICUライブラリでサポートされているすべて)で表示できます。ソースエンコーディングがわかったら、クリップボードを介してファイル全体(バイト)をコピーし、ターゲットエンコーディング(UTF-8など)が選択されている新しいドキュメントに挿入できます。

UTF-8または他のUnicode表現を使用する場合、非常に役立ちます nicodeChecker

0
pi3

chardet のようなファイルのエンコーディングを検出しようとするプログラムがあります。次に、iconvを使用して別のエンコードに変換できます。ただし、元のテキストはそのままで、情報が失われないようにする必要があります(たとえば、アクセントやアクセント付き文字全体を削除するなど)。

0
unbeknown

中国語の文字に関するコードページの問題の解決策を探しているときにこの質問を見つけましたが、結局、私の問題はWindowsがUIで正しく表示されないという問題でした。

他の誰かが同じ問題を抱えている場合は、Windowsのローカルを中国に変更してから元に戻すことで、修正できます。

私はここで解決策を見つけました:

http://answers.Microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chinesejapanese-characters-to/fdb1f1da-b868-40d1-a4a4-7acadff4aafa? page = 2&auth = 1

また、メモ帳++のデータを見るというGabrielの答えは、窓について私をひっくり返したものでした。

0
Malcolm Lock