書き出すテキストファイルの UTF-8 BOM と Markdown 継続行
一言まとめ
ブラウザから `.md` をダウンロードさせるときは先頭に UTF-8 BOM(`\uFEFF`)を付けると Windows のエディタでの Shift-JIS 誤判定を防げる。`.json` には付けない(RFC 8259 で BOM は本文ではなく、弾くパーサがある)。リスト項目内の改行は直後に 2 スペースを入れて継続行にする。
調査時点: 2026-08。ある PWA の Markdown / JSON 書き出し機能を Windows 実機で確認したときに出た 2 つの問題と対処。
BOM(Byte Order Mark)は、テキストの先頭に置く Unicode の特殊な印。UTF-8 ではバイト順の指定は不要だが、UTF-8 であることを示す目印として使われる。
.md には BOM を付け、.json には付けない
| 形式 | BOM | 理由 |
|---|---|---|
.md(人が開くテキスト) | 付ける(\uFEFF を先頭に) | BOM 無し UTF-8 を Windows のエディタが Shift-JIS と誤判定し、日本語が化ける。先頭バイトが # 2026 のような ASCII だと特に判定を外しやすい |
.json(機械が読む) | 付けない | RFC 8259 上、BOM は本文の一部ではなく、BOM 付き JSON を弾くパーサがある |
書き出し先が利用者自身の PC である以上、受け手のエディタ設定に頼るより送り手で付けるほうが短い。
リスト項目内の改行は継続行にする
- 10:30 メモの 1 行目 メモの 2 行目(先頭に 2 スペース)改行を含むメモをリスト項目に入れると、2 行目がリスト項目から抜けて別の段落になり、時刻との結びつきが切れる。改行の直後に 2 スペースを入れると Markdown 仕様どおりの継続行になり、HTML 変換でも LLM の読み取りでも「時刻に紐づくメモ」として残る。空行はそのまま残し、スペースだけの行は作らない。
出どころを 1 本にする
BOM 付与とインデント処理は、ダウンロード用と他の出力(添付ファイル、プロンプト埋め込みなど)が同じ関数を通るようにする。経路ごとに書式がずれるのを防ぐ。
関連
更新履歴
- 2026-08-30: 初版(ローカル調査ノート)
- 2026-10-17: Wiki へ移植、概念ページとして再構成。冒頭に定義を追加
同じトピック — Web
- 単一画面の Canvas ツールのスタック選定(vanilla TS / Svelte / Preact と PWA ツーリング)
- DAM カラオケ検索(clubdam)の挙動と制約
- Core Web Vitals と画像最適化
- favicon の最小構成(SVG + ICO + apple-touch-icon + manifest)
- フロントエンドのフレームワークとツールの動き(2025)
- HTML-in-Canvas API
- HTML-in-Canvas の実現性(a11y・性能・セットアップ・シェーダー)
- iOS Safari で canvas の画像を保存させる(download 属性 / Web Share / 長押し)
- 日本語 Web フォントのライセンスとサブセット化
- 個人サイトのライブウィジェットと外部 API の制限
- モダン CSS / Web API の対応状況(2025-2026)
- OPFS(Origin Private File System)
- Google Places API のキーの守り方(ブラウザ露出 vs サーバ中継)
- iOS の PWA 制限
- 機能別 React / TS ライブラリ対応表(2026-04 時点)
- URL 長の上限と日本語の URL エンコード膨張
- 縦書き Web の実装(writing-mode・ルビ・圏点・縦中横・禁則)
- PWA の Web Share Target(Android)の実測と落とし穴
- WebAssembly(Wasm)
- YouTube oEmbed で動画タイトルとチャンネル名を取る