文字コード 文字化け 原因を切り分ける7つの確認手順と安全な直し方

0
12
文字コード 文字化け 原因を切り分ける7つの確認手順と安全な直し方

レーザーカッター用の加工データに付けた日本語ファイル名が読めない。Arduinoのシリアルモニタに「ã1ã2」と表示される。Pythonで作ったCSVを表計算ソフトで開くと、材料名が記号になる。こうした困りごとの多くは、文字コード 文字化け 原因を「表示ソフトの不具合」とだけ捉えると解決が遠回りになります。

文字化けは、文字そのものが壊れたとは限りません。多くの場合、保存されたバイト列を、開く側が別のルールで文字へ変換したために起こります。デジタル工作では、パソコン、マイコン、Webサービス、加工機用ソフトなど複数の機器をまたいでデータを扱います。どの場所で変換が起きたかを順番に追えば、初心者でも再現性のある直し方ができます。

文字コードと文字化けの仕組みを手でつかもう

コンピュータは「あ」や「木」という文字を、そのまま保存しているわけではありません。文字を数値の並び、つまりバイト列に変換して保存・送信しています。この変換ルールが文字コードです。ファイルを開くときは、バイト列を同じルールで文字に戻します。

たとえばUTF-8で保存した「日本語」を、Shift_JISとして読み込むと、読み取り側は同じバイト列に別の意味を割り当てようとします。その結果が文字化けです。紙に書いた設計図を、別の単位系の定規で測ってしまう状況に少し似ています。線そのものは残っていても、解釈がずれるのです。

日本語のデータでよく出会うのはUTF-8、Shift_JIS、EUC-JPです。現在のWeb、Python、Raspberry Pi OS、VS CodeなどではUTF-8が標準的です。一方で、古いWindows向けソフト、表計算ソフトとのCSV受け渡し、一部の加工機付属ソフトではShift_JIS系の設定が必要になることがあります。どちらが常に正しいわけではなく、受け取る機器やソフトに合わせることが大切です。

文字コードと改行コードは別の問題

CSVや設定ファイルが「1行に見える」「行がずれる」という場合、文字コードではなく改行コードが原因かもしれません。WindowsではCRLF、LinuxやmacOSではLFが一般的です。日本語が正常なら文字コードは合っている可能性が高く、改行の設定を確認する方が近道です。

また、通信で文字が読めないときは、文字コードと通信速度を混同しないようにしましょう。Arduinoのシリアル通信では、ボーレートが不一致でも意味不明な記号が流れます。これはUTF-8とShift_JISの違いではなく、ビット列を正しく受信できていない問題です。

文字コード 文字化け 原因を切り分ける7つの確認手順

文字化けを見つけたら、元ファイルを何度も上書き保存しないでください。正しいバイト列が残っているなら、読み込み設定だけで復旧できることがあります。まずコピーを作り、次の順番で確認します。

1. どこで初めて化けたかを記録する

最初に「正常だった場所」と「初めて異常になった場所」を分けます。テキストエディタでは正しいのにCSVを表計算ソフトで開くと化けるなら、CSV作成処理よりも表計算ソフト側の読み込み方法が有力です。逆に、Pythonが出力した直後のファイルがエディタでも読めないなら、プログラムの保存指定を確認します。

加工用データでも同じです。CADソフトで表示される日本語注記、SVGを書き出した後のファイル名、加工機ソフトへ読み込んだ後の表示を別々に見ます。「どのソフトでも化けている」と「特定のソフトだけで化ける」では、対策が変わります。

2. ファイルを別のエディタで開く

エディタには、現在の文字コードを表示したり、指定して再読み込みしたりする機能があります。UTF-8で化けているなら、Shift_JISやEUC-JPとして再読み込みを試します。ただし、正常に見えた後にそのまま保存すると、意図せず別の文字コードへ変換する場合があります。まずは「再読み込み」で確認し、保存形式は理解してから変更しましょう。

判定に迷うときは、日本語だけでなく記号も見ます。「¥」「〜」「髙」などは環境差が出やすい文字です。ファイル名や加工データの注記では、機種依存文字や旧字体を使わず、ASCII文字と一般的な日本語に寄せると、古いソフトとの受け渡しで安全性が上がります。

3. 作成時の保存形式を確認する

テキストエディタで作った設定ファイル、Pythonが出力したログ、CAD/CAMソフトから書き出したCSVには、それぞれ保存時の文字コード設定があります。自分で作ったファイルなら、最初はUTF-8に統一するのが扱いやすい方法です。複数人で編集する教材や、Gitで管理するプログラムでもUTF-8は相性がよい選択です。

ただし、受け取り側がUTF-8を読めないならShift_JISに変換する必要があります。このとき、元のUTF-8ファイルを残し、提出用・機器用に変換したコピーを作りましょう。1つのファイルを用途ごとに何度も変換すると、どの形式が正本なのか分からなくなります。

4. BOMの有無を疑う

BOMは、UTF-8などのファイル先頭に付けられる識別用のバイト列です。BOM付きUTF-8を期待するWindows系ソフトもありますが、BOMを文字として扱い、先頭項目だけおかしくなるソフトもあります。

たとえばCSVの最初の列名だけが変、Pythonで先頭の文字列比較が失敗する、といった症状ではBOMが候補です。Pythonでは`utf-8-sig`を指定すると、読み込み時にUTF-8のBOMを扱いやすくなります。

“`python with open(“parts.csv”, encoding=”utf-8-sig”) as f: text = f.read() “`

BOMは万能の解決策ではありません。相手のソフトが求める形式を確認し、UTF-8、UTF-8 BOM付き、Shift_JISのどれを渡すか決めます。

5. CSVは「開く」より「インポート」する

CSVをダブルクリックして開くと、表計算ソフトが文字コードを自動判定します。この判定は便利ですが、UTF-8の日本語をShift_JISとして扱って文字化けさせることがあります。材料リスト、部品表、授業用の測定データでは特に起きやすい場面です。

CSVは、表計算ソフトのインポート機能から開き、文字コードを選択してください。UTF-8を指定し、区切り文字がカンマかタブかも合わせて確認します。日本語が読めても列が1つに固まる場合は、文字コードではなく区切り文字の問題です。

相手がインポート操作をできない環境なら、CSVをShift_JISで出力する方法も実用的です。代わりに、絵文字や一部の特殊文字はShift_JISに変換できず、失われることがあります。部品名には絵文字を使わない、といった運用ルールも小さなトラブル予防になります。

6. Pythonでは読み込みと書き込みを明示する

Python 3ではUTF-8を使う場面が多いものの、OSの設定や実行環境によって既定値に依存すると再現性が下がります。データファイルを扱うプログラムでは、`open()`の`encoding`を明示する習慣を付けましょう。

“`python with open(“design-note.txt”, “w”, encoding=”utf-8″, newline=”n”) as f: f.write(“アクリル板: 3mmn”) “`

Shift_JISのCSVを読みたい場合は`encoding=”cp932″`が役立つことがあります。cp932はWindows日本語環境で使われる拡張を含む文字コードです。ただし、相手が厳密なShift_JISを要求するケースでは差が問題になることもあります。外部機器や業務システムへ渡すデータは、仕様書やサンプルファイルで確認してください。

Raspberry Piでプログラムの表示だけが化ける場合は、端末のロケールも確認対象です。ファイルがUTF-8でも、端末側がUTF-8として表示できない設定では正しく見えません。ファイル、Python、ターミナルという3か所を分けて考えると迷いません。

7. Arduinoや機器通信はバイト列から考える

Arduinoの`Serial.print(“温度”)`で文字化けする場合、スケッチは通常UTF-8の文字列を送ることになります。シリアルモニタがUTF-8表示に対応していない、あるいはボーレートが違う可能性を順に確認します。最初に`Serial.begin(115200);`とシリアルモニタの115200を合わせ、次に英数字の`TEST 123`を送ります。

英数字まで読めないなら通信設定の問題です。英数字は読めるのに日本語だけ化けるなら、表示側の文字コード対応を疑います。組み込み機器との通信では、日本語を送らず、`TEMP=24.5`のようなASCII形式にしておくと、マイコン、センサー、ログ保存、クラウド連携まで扱いやすくなります。利用者へ見せる日本語は、PCやWeb画面の側で表示する設計も有効です。

直したつもりで壊さないための注意点

文字化けした文字列をコピーして別ファイルに貼り付け、「見た目が直った」状態で保存するのは危険です。すでに誤った解釈をした文字を、さらに別の文字コードで保存する二重変換が起きることがあります。元ファイルのバックアップがあれば、元のバイト列を正しい文字コードで開き直す方法を優先してください。

また、PDF、画像、3Dモデルの内部テキストなどは、一般的なテキストファイルとは構造が異なります。拡張子だけを`.txt`に変えたり、バイナリエディタで無理に書き換えたりすると、ファイル全体を壊すおそれがあります。加工機用の独自形式は、対応するソフトからファイル名や注記を修正して再出力する方が安全です。

データを「作る人」「加工する人」「印刷する人」が分かれるプロジェクトでは、最初にUTF-8を基本とするか、受け渡し用CSVはShift_JISにするかを決めておくと安心です。フォルダ名、ファイル名、材料リスト、プログラムのコメントまで同じルールに寄せれば、作品づくりの時間を文字化けの修理ではなく、形にする工夫へ使えるようになります。次に困ったら、まず正常だった場所を一つ見つけ、そこからデータの受け渡しをたどってみましょう。