Text / 納品前のbyte確認
長文をUTF-8 byte上限で分割し、欠落なく渡す
文字数だけでは、受け手のbyte上限に収まるか分かりません。Unicode文字を壊さず分割し、各chunkのbyte数と再結合結果を確認してから渡します。
Text / 納品前のbyte確認
文字数だけでは、受け手のbyte上限に収まるか分かりません。Unicode文字を壊さず分割し、各chunkのbyte数と再結合結果を確認してから渡します。
A🙂Bは見た目の文字数が3でも、UTF-8では6 bytesです。JavaScriptのlengthだけで上限を判定すると、絵文字や日本語の境界で受け手の制限を超えることがあります。
| fixture | 上限 | source bytes | chunk bytes | 再結合 |
|---|---|---|---|---|
| ASCII | 4 | 6 | 4 | 2 | 一致 |
| 日本語 | 7 | 15 | 6 | 6 | 3 | 一致 |
| emoji | 5 | 6 | 5 | 1 | 一致 |
| 境界 | 4 | 6 | 1 | 4 | 1 | 一致 |
chunkへ次のUnicode code pointを追加したとき、UTF-8 byte数が上限以下なら追加します。超える場合は次のchunkへ送り、元のcode pointを削除・置換・途中分割しません。
const bytes = new TextEncoder().encode(part).length; if (bytes <= limit) keep(part); else nextChunk();
実際の上限とencodingは、API・キュー・DB・ファイル形式など受け手の仕様を確認してください。
このガイドはブラウザー内の静的資料です。入力・ファイル・検算結果を外部へ送信・保存しません。
上限4 bytesのとき、🙂Bは5 bytesなので、そのまま有効なchunkとして渡せません。省略や無言の切り捨てではなく、分割し直すか受け手へ確認します。