
Claudeにソースコードやテキストファイルを渡したあと、日本語が文字化けしていることに気づいたことはありませんか?
- アップロードした時は気づかなかった
- 出力されたコードを見て初めて違和感に気づいた
- エディタでは正常だったのに、Claude経由だと崩れている
この問題は、特定の言語に限らず発生する可能性があります。
本記事では、
- Claude利用時に文字化けが起きる可能性のある原因
- なぜUTF-8でも問題が起きることがあるのか
- 安全にUTF-8 BOM付きへ一括変換する方法
- 実際に解決した具体例
を、技術的に正確な範囲で解説します。
よくある症状
Claude利用時の文字化けには、次のようなパターンがあります。
- 日本語コメントが崩れる
- 文字列リテラルが壊れる
- 一部のファイルだけおかしくなる
- エディタでは正常表示されている
以下は私が遭遇したケースです。
// AudioService初期化

が
// AudioServiceåˆæœŸåŒ–

のように表示されるケースです。
筆者のケース(実例)
私の環境では、FlutterプロジェクトのDartファイルで発生しました。
- VS Codeでは正常(UTF-8)
- Git上でも問題なし
- しかしClaudeで処理した結果に文字化けが混ざる
このことから、ローカルファイル自体は壊れていないと判断できました。
ただし、この現象はDartやFlutterに限定されるものではありません。
JavaScript、TypeScript、Python、Javaなどでも同様の事例が起こり得ます。
なぜ文字化けが起きるのか?
Claudeの内部仕様は公開されていませんが、一般的に文字化けが起きる要因として考えられるのは:
1. エンコーディングの自動判定
ファイルがUTF-8であっても、
- アップロード時
- 内部処理時
- 出力生成時
にエンコーディングが自動判定される可能性があります。
このとき誤判定が起きると、UTF-8のバイト列が別の文字コードとして解釈され、文字化けが発生します。
2. UTF-8(BOMなし)は明示性が弱い
一般的に、ソースコードは「UTF-8(BOMなし)」が標準です。
しかし、BOMなしUTF-8は先頭にエンコーディング識別情報がありません。
そのため、環境によっては判定が不安定になる可能性があります。
解決策:UTF-8 BOM付きに変換する
BOMとは?
BOM(Byte Order Mark)は、UTF-8ファイルの先頭に付与される3バイト:
EF BB BF
これにより、
「このファイルはUTF-8です」
と明示的に示すことができます。
BOM付きにすることで、エンコーディング判定の安定性が向上するケースがあります。
※なお、言語やビルド環境によってはBOMを推奨しない場合もあるため、チーム開発では統一が必要です。

安全な一括変換方法(再解釈しない)
重要なのは、
ファイルを文字列として再保存しないこと
再解釈すると、既に壊れている場合さらに悪化する可能性があります。
以下は バイト列のままBOMだけを付与する方法 です。
PowerShellで一括変換(例:全ソースファイル)
Get-ChildItem -Recurse -Include *.dart,*.js,*.ts,*.py,*.java | ForEach-Object {
$bytes = [System.IO.File]::ReadAllBytes($_.FullName)
if (!($bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF)) {
$newBytes = @(0xEF,0xBB,0xBF) + $bytes
[System.IO.File]::WriteAllBytes($_.FullName, $newBytes)
}
}
この方法のメリット
- 文字列として再解釈しない
- 既存データを壊さない
- 既にBOMがある場合は何もしない
- 任意の拡張子に応用可能
VS Codeで確認する方法
- ファイルを開く
- 右下のエンコーディング表示を確認
- 「エンコード付きで保存」→「UTF-8 with BOM」
注意点
- 一部のビルドツールではBOMを嫌う場合がある
- チーム開発では文字コード方針を統一すること
- Git設定による自動変換にも注意する
まとめ
Claude利用時に発生する文字化けは、
- 言語固有の問題ではない
- UTF-8(BOMなし)の判定が不安定になるケースがある
- UTF-8 BOM付きにすることで安定する場合がある
という特徴があります。
もし、
- エディタでは正常
- Gitでも正常
- Claude経由でのみ文字化けする
という状況であれば、
UTF-8 BOM付きへの変換を一度試してみる価値はあります。