「CSVを開いたら日本語が文字化けした」「別の環境に移したファイルが正しく表示されない」——こうした問題のほとんどは文字コードの不一致が原因です。文字コードを正しく確認・変換できるようになることで、文字化けトラブルの大部分を防げます。
この記事では、Windows・Mac・Linuxそれぞれの環境での文字コード確認方法から、変換の基本・応用まで体系的に解説します。
文字コードとは

文字コードの基本概念
文字コードとは、コンピューターが文字を数値として扱うための対応表(規則)です。たとえば「A」という文字はASCIIコードで65、UTF-8では0x41という数値に対応しています。コンピューターはすべての文字を数値として保存・処理しており、この「文字↔数値」の変換ルールが文字コードです。
主な文字コード(UTF-8、Shift_JIS、EUC-JPなど)
| 文字コード | 特徴 | 主な用途 |
|---|---|---|
| UTF-8 | Unicode規格・世界中の文字に対応・可変長(1〜4バイト) | Webサイト・現代のアプリ全般・国際的なデータ交換 |
| Shift_JIS(CP932) | 日本語専用・2バイト文字・Windows標準 | 古いWindowsアプリ・Excelのデフォルト・レガシーシステム |
| EUC-JP | 日本語専用・2〜3バイト・UNIX系の伝統的エンコード | 古いLinuxシステム・レガシーWebサービス |
| UTF-16 | Unicode規格・固定2バイト(一部4バイト) | WindowsのAPIやWord内部処理 |
| ISO-8859-1 | 西欧言語対応・1バイト固定 | 欧米の古いWebサイト・メール |
| ASCII | 英数字・記号のみ・1バイト固定 | プログラムソースコード・設定ファイル |
文字化けの原因と文字コードの重要性
文字化けは、ファイルを保存した文字コードと読み込んだ文字コードが一致しないときに発生します。たとえばShift_JISで保存したCSVをUTF-8として読み込むと、日本語が意味不明な記号の羅列になります。
特にExcelは標準でShift_JISを使用するため、UTF-8のCSVをそのまま開くと日本語が文字化けします。UTF-8のCSVをExcelで正しく開くには、BOM付きUTF-8で保存するかExcelのデータインポート機能を使う必要があります。
文字コードを確認する方法(Windows編)

テキストエディタでの確認
メモ帳やサクラエディタでの文字コード表示
メモ帳(Windows 10/11):
- 確認したいファイルをメモ帳で開く
- 「ファイル」→「名前を付けて保存」を選択する
- ダイアログ下部の「文字コード」ドロップダウンに現在の文字コードが表示される
- 確認のみの場合はキャンセルして閉じる
表示される文字コードの対応:
| メモ帳の表示 | 実際の文字コード |
|---|---|
| UTF-8 | UTF-8(BOMなし) |
| UTF-8(BOM付き) | UTF-8(BOM付き) |
| ANSI | Shift_JIS(日本語Windows環境) |
| Unicode | UTF-16 LE(BOM付き) |
Windowsでの文字コード確認方法の詳細はこちらの記事も参考になります。
サクラエディタ:
- ファイルをサクラエディタで開く
- 画面下部のステータスバーに文字コードが表示される(例:UTF-8、Shift_JIS)
- または「ファイル」→「文字コードを指定して開く」で確認できる
Visual Studio Code(VSCode):
- ファイルをVSCodeで開く
- 右下ステータスバーに文字コードが表示される(例:UTF-8、Shift JIS)
- クリックすることで別の文字コードで再読み込みまたは保存できる
VSCodeでの文字コード確認と設定の詳しい手順はこちらの記事でも解説されています。
PowerShellでの確認
Get-Content コマンドとエンコード指定例
PowerShellではファイルの先頭バイトを確認することで文字コードを判別できます。
# ファイルの先頭バイトを16進数で確認(BOMの検出)
$bytes = [System.IO.File]::ReadAllBytes("C:\path\to\file.txt")
$bytes[0..3] | ForEach-Object { "{0:X2}" -f $_ }
出力結果とBOMの対応:
# EF BB BF → UTF-8(BOM付き)
# FF FE → UTF-16 LE
# FE FF → UTF-16 BE
# BOMなし → UTF-8またはShift_JIS(自動判別が必要)
# 文字コードを指定してファイルを読み込む
Get-Content "C:\path\to\file.txt" -Encoding UTF8
Get-Content "C:\path\to\file.txt" -Encoding Default # Shift_JIS(日本語環境)
# ファイルを特定エンコードで読んで内容を確認
$content = Get-Content "C:\path\to\file.csv" -Encoding Default
$content | Select-Object -First 5 # 先頭5行を表示
文字コードを確認する方法(Mac編)

テキストエディタでの確認
テキストエディットでエンコード表示
テキストエディット:
- テキストエディットでファイルを開く
- 「ファイル」→「別名で保存」を選択する
- 「プレーンテキストのエンコード」ドロップダウンで現在の文字コードを確認できる
- 確認のみの場合はキャンセルして閉じる
VSCode(Mac):
Windowsと同様に、ウィンドウ右下のステータスバーに文字コードが表示されます。クリックすることで文字コードの変更も可能です。
ターミナルでの確認
file -I filename コマンドの利用
Macのターミナルではfileコマンドで文字コードを確認できます。Mac・Linuxでのfileコマンドを使った文字コード確認の詳細はこちらの記事も参考になります。
# fileコマンドで文字コードを確認(-Iオプション)
file -I sample.txt
# 出力例
# sample.txt: text/plain; charset=utf-8
# sample.txt: text/plain; charset=iso-2022-jp
# sample.txt: text/plain; charset=unknown-8bit
# 複数ファイルをまとめて確認
file -I *.txt
# 出力例
# file1.txt: text/plain; charset=utf-8
# file2.txt: text/plain; charset=shift_jis
# file3.txt: text/plain; charset=utf-16le
Tips: fileコマンドはあくまで推測による判別です。BOMなしUTF-8とShift_JISは内容によっては判別が難しい場合があります。重要なファイルは複数の方法で確認することを推奨します。
文字コードを確認する方法(Linux編)

コマンドラインで確認
file コマンド
# fileコマンドで文字コードを確認
file sample.txt
# 出力例
# sample.txt: UTF-8 Unicode text
# sample.txt: ISO-8859 text
# sample.txt: ASCII text
# -iオプションでMIMEタイプとして表示(Linuxでは小文字の-i)
file -i sample.txt
# 出力例
# sample.txt: text/plain; charset=utf-8
LinuxでのUnicode・文字コード管理の詳細はこちらの記事も参考になります。
enca や iconv コマンドの活用
enca(Encoding Detection and Conversion)はより精度の高い文字コード検出ができるツールです。
# encaのインストール(Ubuntu/Debian)
sudo apt install enca
# encaのインストール(CentOS/RHEL)
sudo yum install enca
# 文字コードを確認
enca sample.txt
# 出力例
# Universal transformation format 8 bits; UTF-8
# Shift-JIS Japanese encoding
# 言語を指定して確認(日本語ファイルの場合)
enca -L ja sample.txt
# 複数ファイルをまとめて確認
enca -L ja *.txt
# hexdumpでBOMを確認
hexdump -C sample.txt | head -3
# 出力例(UTF-8 BOM付きの場合)
# 00000000 ef bb bf e3 81 93 e3 82 93 e3 81 ab e3 81 a1 e3 |...こんにちe|
# BOMの有無でUTF-8を判別
head -c 3 sample.txt | xxd
エディタでの確認
vim、geditなどで文字コード表示
vim:
# vimでファイルを開いた後、コマンドモードで確認
:set fileencoding
# 出力例
# fileencoding=utf-8
# fileencoding=cp932
# または省略形
:set fenc
gedit(Linuxデスクトップ環境):
- geditでファイルを開く
- 「ファイル」→「名前を付けて保存」を選択する
- 「文字エンコード」ドロップダウンで現在の文字コードを確認できる
文字コード変換の基本

iconvを使った文字コード変換
iconvはLinux・Macで標準的に使える文字コード変換コマンドです。iconvコマンドを使った文字コード変換の詳細な使い方はこちらの記事も参考になります。
# 基本構文
iconv -f 変換元エンコード -t 変換先エンコード 入力ファイル > 出力ファイル
# Shift_JISからUTF-8に変換
iconv -f SHIFT_JIS -t UTF-8 input.txt > output.txt
# EUC-JPからUTF-8に変換
iconv -f EUC-JP -t UTF-8 input.txt > output.txt
# UTF-8からShift_JISに変換
iconv -f UTF-8 -t SHIFT_JIS input.txt > output.txt
# 変換と同時に元ファイルを上書き(--outputオプション)
iconv -f SHIFT_JIS -t UTF-8 -o output.txt input.txt
# 対応エンコード一覧を確認
iconv -l
エディタで別の文字コードで保存
VSCodeでの文字コード変換:
- ファイルをVSCodeで開く
- 右下の文字コード表示をクリックする
- 「エンコード付きで保存」を選択する
- 変換後の文字コードを選択する
- ファイルが指定した文字コードで保存される
サクラエディタでの変換:
ファイル → 名前を付けて保存 → 「文字コードセット」で変換先を選択 → 保存
変換時の注意点(文字化け・未対応文字)
Shift_JISに変換する際、UTF-8で使われている一部の文字(絵文字・記号・珍しい漢字)はShift_JISに対応していないため変換に失敗することがあります。変換前に必ずバックアップを作成してください。
# 変換できない文字をエラーとして表示(iconvのデフォルト動作)
iconv -f UTF-8 -t SHIFT_JIS input.txt > output.txt
# エラー例: iconv: 不正な入力があります
# 変換できない文字をスキップして変換
iconv -f UTF-8 -t SHIFT_JIS//IGNORE input.txt > output.txt
# 変換できない文字を「?」に置換して変換
iconv -f UTF-8 -t SHIFT_JIS//TRANSLIT input.txt > output.txt
文字コード確認の応用
複数ファイルの文字コード確認
#!/bin/bash
# ディレクトリ内のすべてのテキストファイルの文字コードを確認
TARGET_DIR="/path/to/directory"
echo "=== 文字コード一覧 ==="
find "$TARGET_DIR" -name "*.txt" -o -name "*.csv" | while read file; do
encoding=$(file -i "$file" | grep -o "charset=.*" | cut -d= -f2)
echo "$file: $encoding"
done
# Pythonを使った一括確認(より精度が高い)
python3 -c "
import chardet
import glob
for filepath in glob.glob('/path/to/*.txt'):
with open(filepath, 'rb') as f:
raw = f.read()
result = chardet.detect(raw)
print(f'{filepath}: {result[\"encoding\"]} (信頼度: {result[\"confidence\"]:.0%})')
"
スクリプトや自動処理で文字コードチェック
CSVの一括処理やバッチ変換での文字コード自動判別パターンです。スクリプトでの文字コード管理の応用方法はこちらの記事も参考になります。
#!/bin/bash
# 文字コードを確認して必要に応じてUTF-8に変換するスクリプト
convert_to_utf8() {
local file="$1"
local encoding
# encaで文字コードを判別
encoding=$(enca -L ja -i "$file" 2>/dev/null | head -1)
if [[ "$encoding" == *"UTF-8"* ]]; then
echo "$file: すでにUTF-8です(変換不要)"
elif [[ "$encoding" == *"Shift_JIS"* ]] || [[ "$encoding" == *"CP932"* ]]; then
echo "$file: Shift_JIS → UTF-8 に変換します"
iconv -f SHIFT_JIS -t UTF-8 "$file" > "${file}.utf8"
mv "${file}.utf8" "$file"
else
echo "$file: 文字コードの判別ができませんでした($encoding)"
fi
}
# ディレクトリ内のCSVを処理
for file in /path/to/data/*.csv; do
convert_to_utf8 "$file"
done
Web開発やデータベースでの文字コード管理
Web開発では文字コードの統一が特に重要です。
| 場面 | 推奨文字コード | 設定箇所 |
|---|---|---|
| HTMLファイル | UTF-8 | <meta charset="UTF-8"> |
| PHPファイル | UTF-8 | ファイル保存時の設定・mb_internal_encoding('UTF-8') |
| MySQLデータベース | utf8mb4 | CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci |
| Apache・Nginx設定 | UTF-8 | AddDefaultCharset UTF-8 |
| CSVファイル(Excel向け) | UTF-8 BOM付き | エディタの保存設定 |
また、Web開発での文字コード管理のベストプラクティスはこちらの記事も参考になります。そして、文字コードに関する実践ガイドはkakiro-webでも発信しています。
まとめ
文字コードの確認は文字化け防止や互換性確保に必須
文字コードの不一致はデータ連携・ファイル共有・Webシステムの至るところで文字化けを引き起こします。ファイルを扱う前に文字コードを確認する習慣をつけることが、トラブルを未然に防ぐ最も確実な方法です。
OSやツールに応じた確認方法を使い分ける
- Windows: メモ帳・サクラエディタ・VSCodeのステータスバー・PowerShellで確認できる
- Mac: テキストエディット・VSCode・ターミナルの
file -Iコマンドで確認できる - Linux:
file -i・enca・hexdump・vimのコマンドモードで確認できる - 複数ファイルの一括確認にはシェルスクリプト・Pythonのchardetライブラリが有効
変換時は対応文字やエンコードを意識して安全に処理
文字コード変換にはiconvコマンド・VSCodeの「エンコード付きで保存」・サクラエディタが使えます。Shift_JISへの変換では絵文字や特殊文字が失われるリスクがあるため、変換前のバックアップと変換後の内容確認を必ず行いましょう。現代のシステム開発ではUTF-8(またはutf8mb4)で統一することが最も安全な文字コード管理の基本方針です。

