ハコツールズ

文字コード変換(CSV文字化け修正)

CSV・テキストの文字コードを自動判定し、UTF-8(BOM付き)・Shift_JIS・EUC-JPへ変換。Excelで開くと文字化けするCSVの修復と、変換で失われる文字の事前確認ができます。

入力した内容やファイルは、この端末のブラウザの中だけで処理します。サーバーには送りません。確かめ方

公開: / 制作・運営: ハコツールズ運営者

ファイルはブラウザの中だけで読み込み、サーバーには送られません。

CSV やテキストファイルの文字コード(UTF-8 / Shift_JIS / EUC-JP)を判定し、別の文字コードに書き換えて保存し直す無料ツールです。Web サービスからダウンロードした CSV を Excel で開くと文字化けする、逆に Excel で保存した CSV をシステムにアップロードすると弾かれる、という困りごとを、ファイルを選んでボタンを押すだけで解決します。

文字コードを自動で判定したうえで、その根拠(UTF-8 として何バイト目で規則に合わなくなったか、他の文字コードとして読めたか)を表示します。判定を信じてよいかを自分で確かめられ、外れていれば手動で切り替えてプレビューを見直せます。

Excel で CSV を開くと文字化けするのはなぜ?

日本語版の Excel は、先頭に BOM のない CSV を Shift_JIS として読むためです。Web サービスや Google スプレッドシートが出力する CSV は UTF-8 なので、同じバイト列を別の文字コードの規則で解釈してしまい、日本語がすべて別の文字に化けます。英数字だけの列が無事なのは、英数字のバイト列が UTF-8 と Shift_JIS で共通だからです。

「名前,金額」を UTF-8 で保存したバイト列は「E5 90 8D E5 89 8D 2C E9 87 91 E9 A1 8D」です。これを Shift_JIS として読むと「蜷榊燕,驥鷹。�」になります。同じ「名前,金額」を Shift_JIS で保存すると「96 BC 91 4F 2C 8B E0 8A 7A」で、UTF-8 とは長さも並びも違います。

文字UTF-8Shift_JISEUC-JP
あE3 81 8282 A0A4 A2
田E7 94 B093 63C5 C4
アEF BD B1B18E B1
A414141

表のとおり、ひらがな・漢字は UTF-8 で 3 バイト、Shift_JIS と EUC-JP で 2 バイトです。半角カナは Shift_JIS では 1 バイトになります。英数字はどの文字コードでも同じ 1 バイトなので、文字化けしても数字の列だけは読めます。

文字コードを変換して保存する手順は?

  1. 「変換するファイル」で .csv か .txt を選びます。読み込みと同時に文字コードを判定し、先頭 20 行をプレビューします
  2. プレビューが文字化けしていたら、「読み込む文字コードを手動で指定」で切り替えます。読めない箇所がある場合はその数と最初の位置が出ます
  3. 変換先の文字コードと改行コードを選びます。Excel で開くのが目的なら「Excel で開ける形式にする」を押すと、UTF-8(BOM 付き)と CRLF が一度に選ばれます
  4. 変換先にない文字があれば、ボタンの下に文字と件数が出ます。消えて困る文字なら変換先を変えます
  5. 「変換してダウンロード」を押すと、元のファイル名に変換先の接尾辞を付けたファイルが保存されます

BOM 付き UTF-8 と Shift_JIS のどちらを選ぶ?

Excel で開くのが目的なら BOM 付き UTF-8 を選びます。BOM はファイル先頭に置く 3 バイトの印(EF BB BF)で、Excel はこれを見て UTF-8 と判断します。UTF-8 のままなので絵文字や環境依存文字も失われず、Google スプレッドシートや Web システムにもそのまま戻せます。

Shift_JIS を選ぶのは、アップロード先が Shift_JIS を指定している場合(古い業務システム、一部の自治体・金融機関の取り込み形式)だけです。Shift_JIS に存在しない文字は「?」に置き換わって失われます。EUC-JP も同じ理由で、受け取り側が指定しているときに限って使います。

改行コードは Excel と Windows が CRLF、Mac・Linux・Web システムが LF です。受け取り側が指定していなければ「元のまま」で問題ありません。「Excel で開ける形式にする」ボタンは BOM 付き UTF-8 と CRLF をまとめて選びます。

文字コードの自動判定はどう決めている?

先頭の BOM、UTF-8 の規則への適合、Shift_JIS と EUC-JP での読み取り可否の順に調べ、1 つに絞れたときだけ「確定」と表示します。UTF-8 は「2 バイト目以降は必ず 10 で始まる」という厳密な規則があるため、Shift_JIS や EUC-JP の日本語が偶然 UTF-8 として成立することはまずありません。逆に UTF-8 の規則に合わなければ、その位置が何バイト目かを根拠として表示します。

たとえば「田中」を Shift_JIS で保存したファイルは「UTF-8 としては 1 バイト目で規則に合わなくなります。Shift_JIS と EUC-JP の両方で読めるため、文字の出現傾向から Shift_JIS と推定しました。プレビューが文字化けしていたら手動で切り替えてください」と判定され、UTF-8 で保存したファイルは「全バイトが UTF-8 として正しく読めます。Shift_JIS や EUC-JP の日本語が偶然 UTF-8 の規則を満たすことはまずありません」と判定されます。

Shift_JIS と EUC-JP の両方で読めてしまうバイト列(半角カナだけの短い文書など)は、文字の出現傾向から推定し、「推定」と表示します。どちらとしても読めない箇所があるファイルは、読めない文字を「�」で表示し、最初に現れる行と桁を示します。壊れたファイルや ZIP・画像などのテキストでないファイルを選んだときも、この表示になります。

変換で消える文字・変わる文字は?

Shift_JIS と EUC-JP に存在しない文字(絵文字など)は「?」に置き換わり、波ダッシュは全角チルダに変わります。変換前に文字と件数を表示するので、消えて困る文字があれば BOM 付き UTF-8 を選び直せます。

「価格 1,000〜2,000 円 😀 ①」を Shift_JIS に変換すると、消える文字は「😀」、別の文字に変わるのは「〜 → ~」です。丸数字の ① は JIS 規格にはありませんが、Windows の拡張(CP932)として Shift_JIS に含まれるため残ります。

波ダッシュが変わるのは、Shift_JIS に 〜(U+301C) と ~(U+FF5E) の区別がなく、どちらも同じコード(0x8160)に対応するためです。Shift_JIS に変換して読み戻すと全角チルダ側に揃います。見た目はほぼ同じで文字が消えるわけではありませんが、元のテキストと完全一致で照合する用途では差が出ます。

ファイル名や全角半角の文字化けも直せる?

文字化けの原因がファイルの中身か、ファイル名か、文字の幅かで道具が変わります。

  • CSV・テキストの中身が文字化けする → 本ツール。文字コードを判定して変換します
  • ZIP を解凍したらファイル名が文字化けした → ZIP 解凍・圧縮。Windows で作った ZIP のファイル名は Shift_JIS で入っているため、解凍側で再解釈します
  • 読めるが全角と半角が混在している → 全角半角変換。文字コードの問題ではなく、文字種ごとに幅を揃える処理です

対応しているファイルサイズや文字コードは?

  • 一度に変換できるファイルは 20 MB までです。それを超えるファイルはエラーとして表示します
  • 対応する文字コードは UTF-8(BOM の有無)・Shift_JIS(CP932)・EUC-JP と、読み込みのみ UTF-16 です。JIS(ISO-2022-JP)のメール本文などは対象外です

判定が外れたり変換で変わらない部分は?

  • Shift_JIS と EUC-JP の両方で読めてしまう短いファイルは判定を外すことがあります。「推定」と出たときはプレビューを確認し、必要なら手動で切り替えてください
  • 変換は文字コードと改行コードだけを書き換えます。列の区切りや引用符、セルの中身は変えません

よくある質問

Excel で CSV を開くと文字化けするのはなぜですか?
日本語版の Excel は、BOM のない CSV を Shift_JIS として読むためです。Web サービスからダウンロードした CSV は UTF-8 が多く、そのまま開くと化けます。このツールで「UTF-8(BOM 付き)」に変換すると、Excel が UTF-8 と認識してダブルクリックで正しく開けます。
BOM 付き UTF-8 と Shift_JIS はどちらを選べばいいですか?
Excel で開くだけなら BOM 付き UTF-8 を選んでください。絵文字や環境依存文字を含めて全部の文字を残せます。Shift_JIS を選ぶのは、アップロード先のシステムが Shift_JIS を指定している場合だけです。Shift_JIS にない文字は「?」に置き換わり、変換前にその文字と数を表示します。
「〜」が「~」に変わってしまうのはなぜですか?
Shift_JIS には波ダッシュ(U+301C)と全角チルダ(U+FF5E)の区別がなく、同じ 1 つのコード(0x8160)に対応するためです。Shift_JIS に変換して読み戻すと全角チルダ側に揃います。文字が消えるわけではないので、変換前に「別の文字に置き換わる文字」として件数を表示します。
このツールをシェア: