JSON から CSV に変換した後、中国語が文字化けする場合の解決方法
JSON から CSV に変換した後に中国語が文字化けする根本的な原因は、通常、エンコーディングの不一致です。エクスポート時にシステムのデフォルトエンコーディングで書き込み、Excel は UTF-8 のバイト列を GBK として解釈してしまいます。解決策は、まずエクスポートのエンコーディングが UTF-8 であることを確認し、次に Excel にそれを正しく認識させることです。
最も手軽な方法は、CSV に UTF-8 BOM(バイト順マーク)を追加することです。Excel はこれを見ると自動的に UTF-8 として開きます。ブラウザ上でローカル動作するツールを使用している場合、通常はエクスポートオプションでチェックできます。
なぜ文字化けが発生するのか
CSV 自体はプレーンテキストであり、エンコーディング宣言が含まれていません。中国語が正しく表示されるかどうかは、書き込み側と読み取り側が同じエンコーディングを使用しているかどうかにかかっています。
書き込み側が UTF-8 で保存し、読み取り側が GBK で解釈すると、「锟斤拷」や一連の疑問符が表示されます。逆の場合も文字化けします。
もう一つのケースは、データ自体に問題はなく、Excel がダブルクリックで開く際にエンコーディングを推測し間違える場合です。メモ帳やコードで読み取ると正常な場合、これは表示上の問題であり、データの破損ではありません。
JSON から CSV への中国語文字化けの解決方法
以下の順序で確認してください。ほとんどの場合、最初の 2 ステップで解決します。
- エクスポートエンコーディングが UTF-8 であることを確認する。エクスポートオプションで「エンコーディング」または「Encoding」を探し、UTF-8 を選択します。「UTF-8 with BOM」しか選べない場合は、それを優先してください。
- BOM を追加する。BOM なしの UTF-8 でエクスポートされた場合、テキストエディタで「UTF-8 (BOM 付き)」として保存するか、ツールに BOM 付きバージョンを直接エクスポートさせます。
- インポート方式で開く。Excel で「データ - テキスト/CSV から」を選択し、ファイルをダブルクリックするのではなく、手動でエンコーディングを UTF-8 に指定します。
- 元の JSON のエンコーディングを確認する。JSON 仕様では UTF-8 が要求されていますが、一部の API は GBK エンコーディングのバイトストリームを返します。まずソースデータのエンコーディングを確認してから、変換方法を決定してください。
- フィールド値に残存エスケープがないか確認する。中国語が
\u4e2d\u6587のような Unicode エスケープで書き込まれている場合、まずデコードしてからエクスポートする必要があります。そうしないとリテラルとして表示されます。
エンコーディング処理後も CSV が異常に表示される場合は、ファイルを 16 進ビューアで開き、先頭 3 バイトが EF BB BF かどうかを確認してください。そうであれば、BOM が書き込まれています。
JSON から CSV への変換操作方法
基本的な流れは 3 ステップです:JSON を読み取り、構造を平坦化し、CSV を書き出します。
JSON はネストされたオブジェクトや配列を許可しますが、CSV は 2 次元の表のみです。したがって、最初のステップはネスト階層を列名に展開することです。例えば {"user":{"name":"张三"}} は列名 user.name になります。
一般的な方法は:
- JSON 配列内の各オブジェクトを 1 行として扱います。
- すべてのオブジェクトを走査し、出現したすべてのキーを収集してヘッダーとします。
- 欠落しているキーは空文字列で埋め、列の位置を揃えます。
- 値にカンマ、引用符、改行が含まれる場合は、二重引用符で囲み、内部の引用符をエスケープします。
/tools でブラウザ上でローカル動作するツールを見つけることができます。データはサーバーにアップロードされません。具体的なツールページは JSON から CSV への変換ツール をご覧ください。
JSON と CSV の違い
違いを理解すると、変換で何が失われるかを判断するのに役立ちます。
- 構造:JSON はネストされたオブジェクトと配列をサポートしますが、CSV はフラットな 2 次元表のみをサポートします。
- 型:JSON には文字列、数値、ブール、null などの型がありますが、CSV はすべてテキストです。
- エンコーディング:JSON 仕様では UTF-8 が要求されていますが、CSV には強制規定がありません。
- サイズ:JSON はキー名と括弧を含むため、通常、同等の CSV より大きくなります。
- 用途:JSON は API 転送に適しており、CSV は表形式での閲覧や一括インポートに適しています。
変換の代償は、ネスト情報が平坦化されることです。配列フィールドは通常、JSON 文字列にシリアライズしてセルに詰め込むか、複数行に分割します。
JSON から CSV への大きなファイルの処理
ファイルが数十メガバイトを超えると、一度にメモリに読み込むとブラウザのタブがフリーズしやすくなります。
より安定した戦略はストリーミング処理です:チャンクごとに読み取り、行ごとに書き出します。これにより、メモリ使用量は 1 行のサイズにのみ依存し、ファイルの増加に伴いません。
その他に注意すべき点:
- 最初にすべてのキーを収集するためにスキャンし、後で新しいキーが出現して列がずれるのを防ぎます。
- 大きなファイルのエクスポート時はリアルタイムプレビューをオフにし、レンダリング負荷を減らします。
- 複数の CSV に分割してエクスポートする方が、1 つの巨大なファイルより開きやすいです。
- ブラウザのメモリが依然として厳しい場合は、コマンドラインツールに切り替えて処理します。
ブラウザ上でローカル動作するツールは、大きなファイルを処理する際にタブのメモリ制限を受けます。これは環境によるものであり、ツールの欠陥ではありません。ファイルが大きすぎる場合は、ローカルスクリプトへの切り替えをお勧めします。
API デバッグ時の JSON から CSV への変換
API をデバッグする際、返された JSON を迅速に表形式に変換してフィールドを確認する必要がよくあります。
この場合の重点は、元の構造を保持することであり、急いで平坦化しないでください。まずレスポンスを .json ファイルとして保存し、エンコーディングと完全性を確認してから変換します。
いくつかの実用的な習慣:
- レスポンスを保存する際は明示的に UTF-8 を使用し、途中で書き換えられるのを避けます。
- 最上位がオブジェクトか配列かを最初に確認します。単一のオブジェクトはまず配列に包んでから変換します。
- ページネーションフィールドに注意し、1 ページ分のデータだけを変換しないようにします。
- フィールド名にドットや角括弧が含まれる場合、列名の衝突に注意します。
変換後、API ドキュメントと照合して列名を確認すると、フィールドの欠落や名前の変更を迅速に発見できます。
スマートフォンでの JSON から CSV への変換(インストール不要)
スマートフォンで JSON を処理する場合、アプリをインストールするのはウェブページを使うより面倒なことがよくあります。
ブラウザ上でローカル動作するツールはスマートフォンでも同様に使用でき、アプリのインストールは不要で、ネットワーク経由のデータアップロードにも依存しません。ページを開き、貼り付けるかファイルを選択し、エクスポートするだけです。
スマートフォン側の制限は主にメモリとファイルセレクタにあります。巨大なファイルはスマートフォンでの処理には適していません。エクスポート後は表計算アプリで開くことができますが、文字化けが発生した場合は、同様にエンコーディングを優先的に確認してください。
よくある質問
BOM を追加してもまだ文字化けする場合
まず BOM が実際に書き込まれていることを確認し、16 進ビューアで先頭が EF BB BF かどうかを確認してください。書き込まれているのにまだ文字化けする場合、問題は BOM ではなく、データソースのエンコーディングにあります。JSON のソースに戻り、UTF-8 かどうかを確認してください。
メモ帳で開くと正常だが、Excel で開くと文字化けする
これはデータが正常であり、Excel がエンコーディングを推測し間違えたことを示しています。ファイルをダブルクリックするのではなく、「データ - テキスト/CSV から」インポートを使用し、手動で UTF-8 を指定してください。
中国語が \u4e2d\u6587 のような形式になる
これは Unicode エスケープシーケンスであり、文字化けではありません。変換前にデコードして、エスケープを実際の文字に復元してから CSV を書き出す必要があります。
配列フィールドが JSON 文字列として出力される
これは正常です。CSV には配列型がないため、配列を文字列にシリアライズしてセルに入れるしかありません。展開が必要な場合は、手動で複数行に分割する必要があります。
変換後に行数が増えた
ほとんどの場合、配列フィールドが複数行に展開されたためです。変換設定で配列の処理方法を確認し、「文字列としてシリアライズ」か「複数行に展開」を選択してください。
まとめ
中国語の文字化けは基本的にエンコーディングを統一することで解決できます。UTF-8 に BOM を付けることを優先してください。JSON から CSV に変換した後の中国語文字化けの解決方法の答えは、結局のところ、書き込み側と読み取り側が同じエンコーディングを使用し、Excel にどちらを使用すべきかを知らせることです。ツールを選ぶ際は、ブラウザ上でローカル動作するものを優先してください。データが本機から出ないため、デバッグと変換がより安心です。