ブログ一覧

Shift_JISとUTF-8のバイト数はここが違う

同じ36文字のCSV用テキストをUTF-8とShift_JISで実測。80 bytesと58 bytesに分かれる理由と、文字化けの確認箇所を示します。

「36文字なら100 bytes以内に収まる」とは断定できません。今回のCSV用テキストは、文字数は同じ36のまま、UTF-8で80 bytes、Shift_JISで58 bytesになりました。

商品CSVの仕様書に「備考はShift_JISで100 bytes以内」とあるなら、チェックするのは58のほうです。ただし、上限内でも絵文字が変換できなければ入稿は失敗します。この2つをバイト数カウントの結果と取り込みテストで分けて見ます。

CSVに入れる36文字を実測

CSVの備考欄に入れそうな、短いテキストで試します。

商品名:春の案内2026

価格:1,200円

備考:旧システム向けCSV

バイト数カウントを開き、「バイト数を確認する文章」に貼り付けます。入力内容はブラウザ内で計算され、サーバーへ送信されません。

バイト数カウントでUTF-8、UTF-16、Shift_JIS、EUC-JP、ISO-2022-JPの結果を珊瑚色の枠で示した画面

これが文字コードごとのバイト数です。この例では、こう出ました。

項目結果
文字数36文字
UTF-880 bytes
UTF-1672 bytes
Shift_JIS58 bytes
EUC-JP58 bytes
ISO-2022-JP82 bytes

同じ36文字でも、UTF-8とShift_JISでは22 bytes違います。文字数は変わらないのに、保存や送信に必要な容量は変わる、というのがここで見るべき点です。

指定に書かれている表現見るべき数字
36文字以内文字数
全角20文字以内文字数。ただし半角換算の説明がないか確認
Shift_JIS 100 bytes以内Shift_JISのバイト数
UTF-8 200 bytes以内UTF-8のバイト数
CSVで改行不可バイト数より先に改行の有無

なぜUTF-8とShift_JISで差が出るのか

大まかに言うと、UTF-8は世界中の文字を扱いやすい設計で、Shift_JISは日本語環境で長く使われてきた文字コードです。日本語の一般的な文字は、UTF-8では多くの場合3 bytes、Shift_JISでは多くの場合2 bytesになります。

ただし、単純に「日本語1文字=何bytes」と覚えるだけでは足りません。英数字、記号、半角カタカナ、絵文字、改行が混ざると結果が変わります。

たとえば今回の文章には、英数字の 2026,CSV が含まれています。英数字は1 byteで扱われることが多いため、日本語だけの文章とは比率が変わります。商品コード、価格、型番、URLが混ざるCSVでは、この比率が毎行変わります。

CSV入稿では指定文字コードを優先する

CSVや古い業務システムでは、こうした指定がよくあります。

  • Shift_JISで100 bytes以内
  • 商品名は全角20文字以内
  • 備考欄は半角換算で200 bytes以内
  • 改行不可
  • 絵文字、機種依存文字不可

この場合、「文字数が36文字だから大丈夫」とは言えません。指定がbytesなら、指定された文字コードのbytesを見ます。指定がShift_JISなら、UTF-8の値ではなくShift_JISの値を基準にします。

一方、Webフォームや最近のCMSはUTF-8前提のことが多いです。入稿先の仕様書、管理画面、エラー文に文字コードが書かれていないか、先に見ておくと迷いません。指定が見つからない場合は、文字数制限なのかバイト数制限なのかをまず切り分けます。

数字が上限内でも入稿できない場合

バイト数の結果だけでなく、画面下の説明も確認します。

バイト数カウントの説明欄で同じ文章でもバイト数が違う理由を珊瑚色の枠で示した画面

説明欄には、同じ日本語でも保存や送信に必要な容量が変わること、CSV入稿や古い業務システムでは指定された文字コードを見ることが書かれています。

ここは地味ですが、結果の使い方を決めるうえで大事です。ツールの数字を見たあと、最終的には入稿先の指定に合わせます。特に「半角換算」という表現は、単純な文字数とも厳密なバイト数とも違う運用をしていることがあるので、仕様書の例を確認してください。

絵文字や特殊記号はShift_JISで注意する

Shift_JISでは、すべての文字を安全に表現できるわけではありません。絵文字、一部の記号、特殊な漢字、環境依存文字は、入稿先で文字化けしたり、別の文字に置き換わったり、エラーになったりすることがあります。

たとえば、商品説明にこうした文字が入っている場合は注意が必要です。

  • 絵文字: 🌸 📌
  • 丸数字:
  • 特殊な記号:
  • 機種依存文字や旧字体

業務システムがShift_JIS指定なら、見た目だけでは判断しにくいです。バイト数に収まっていても、文字化けすることがあります。重要な入稿では、実際の管理画面や取り込みテストまで確認するのが確実です。

置き換えで済むこともあります。絵文字の は「済」「OK」、丸数字の は「1.」のように、意味を残したまま安全な文字へ変えられます。

改行コードでも結果が変わることがある

テキストの改行は、環境によって扱いが違います。ブラウザ上では入力された状態で計算されますが、保存時に改行コードが変換されると、バイト数も変わる場合があります。

特にCSVでは、改行がデータの区切りとして扱われることがあります。備考欄に改行を入れてよいか、ダブルクォートで囲む必要があるか、仕様書を確認してください。

入稿先が「改行不可」と書いているなら、バイト数より先に改行をなくします。日本語ページの文字数カウントでは「改行を削除」「空行を削除」も使えます。

CSVが通らないときの切り分け表

エラーが「文字数超過」なのか「文字コード変換」なのかで、調べる場所が変わります。

順番確認すること見落とすと起きること
1指定が「文字」か「bytes」か見る数字を間違える
2文字コード指定があるかUTF-8とShift_JISを取り違える
3本文をバイト数カウントへ貼る実データで確認できない
4絵文字、特殊記号、改行を見る文字化けや取込エラーになる
5上限ぎりぎりなら短くする引用符や区切り文字で超過する
6入稿先でテストするツール上はOKでも本番で失敗する

上限ぎりぎりに合わせるより、数bytesだけでも余裕を残すほうが楽です。前後に引用符や区切り文字が自動で付くシステムもあります。