Windowsの文字コードと改行コードの知識マップ(知識グラフ)
type: Dataset
description: Windowsのテキストはバイト列・文字コード・改行コード・BOMという別々の軸の組み合わせで成り立ち、UTF-8やUTF-16LEはUnicodeの符号点をバイト列にする文字コードである一方、CP932は日本語Windows独自のレガシーコードページで両者は前提を取り違えると文字化けを起こす。BOMはUTF-16のバイト順を示す目印であると同時に、UTF-8では「UTF-8である」というシグネチャとして使われ、Windows PowerShell 5.1は非ASCII文字を含むスクリプトを正しく読むためにBOMを必要とする。改行コードはCRLFとLFのどちらかで文字コードとは別問題であり、リポジトリ単位の扱いは.gitattributesで固定できるが、Gitは改行こそ変換しても文字コードは自動で正してくれない。文字化けは正しい文字コードで開き直せば戻ることが多いが、誤読した内容をそのまま保存すると元のバイト列が失われ、表示崩れではなく取り返しのつかないデータ破損になる。

文字コード(キャラクターエンコーディング)
type: Concept
definition: 文字列をバイト列として保存・伝送するための対応規則。Unicodeのような文字集合をどうバイト列にするかを定めるUTF-8やUTF-16、Windows独自のCP932のようなレガシーコードページなどが含まれる。
alternative label: encoding
alternative label: 文字符号化方式
uses: UTF-8
uses: UTF-16LE
uses: CP932
uses: アクティブコードページ(ANSI/ACP)
may cause: 文字化け

改行コード
type: Concept
definition: 行の区切りに使うバイト列。WindowsではCRLF(0D 0A)が伝統的で、Linux/macOSではLF(0A)が一般的。文字コードとは別の軸で決まり、同じ文字コードのファイルでも改行だけがCRLFとLFの間でずれることがある。
alternative label: CRLF
alternative label: LF
alternative label: CR
alternative label: line ending

Unicode
type: Concept
definition: 文字を番号(符号点)で表すための文字集合の枠組み。UTF-8やUTF-16はこれをバイト列にする文字コードであり、Unicode自体とは別の概念である。

UTF-8
type: Concept
definition: Unicodeの可変長エンコーディング方式。バイト列に強い制約があるため、CP932など他のエンコーディングのバイト列は厳密デコードで失敗しやすい。
implements: Unicode

UTF-16LE
type: Concept
definition: Unicodeの符号点を2バイト単位のリトルエンディアンで表す文字コード。Windows APIやPowerShellの一部コマンドレットの既定出力に使われる。
alternative label: UTF-16 リトルエンディアン
alternative label: エディタ上のUnicode表記
implements: Unicode

CP932
type: Concept
definition: Windowsの日本語コードページ(コードページ番号932)。実務上はWindows版のShift_JISに近いが、他システムのShift_JIS実装と1バイトも違わない保証はない。
alternative label: Windows-31J
alternative label: Windowsの日本語コードページ

アクティブコードページ(ANSI/ACP)
type: Concept
definition: Windowsの「ANSI」という表記が多くの場合指す、そのマシンに設定されている既定のコードページ。日本語環境では通常CP932になる。
alternative label: ANSI
alternative label: ACP

BOM(Byte Order Mark)
type: Concept
definition: ファイル先頭に置かれ、どのUnicodeエンコーディングかを示す数バイトの目印。UTF-8はEF BB BF、UTF-16 LEはFF FE、UTF-16 BEはFE FF。
alternative label: バイトオーダーマーク
uses: Unicode

文字化け
type: Concept
definition: 実際のバイト列の解釈が意図したencodingとずれ、表示や内容が壊れて見える状態。

PowerShellの文字コード既定値
type: Concept
definition: PowerShellのコマンドレットが読み書きに使う既定の文字コード。PowerShell 6以降はutf8NoBOMに統一されている一方、Windows PowerShell 5.1はコマンドレットごとに既定がそろっていない。
alternative label: $OutputEncoding
alternative label: -Encoding
alternative label: utf8NoBOM

.gitattributes
type: Concept
definition: リポジトリ単位でテキストファイルの改行変換(CRLF/LF)などの取り扱いを固定するGitの設定ファイル。
alternative label: gitattributes

誤読内容の再保存によるデータ破損
type: Concept
definition: 文字化けして見える内容を正しい文字コードで開き直さずそのまま保存し、元のバイト列を失うこと。表示崩れとは異なり、あとから正しい文字コードを知っても元に戻らない。

subject: 文字コード(キャラクターエンコーディング)
predicate: uses
object: Unicode
description: UTF-8やUTF-16のような現代の文字コードでは、Unicodeは文字を番号で表す枠組みであり、これらの文字コードがこれをバイト列に変換する(CP932のようなUnicode以前のレガシーコードページはUnicodeを介さない)
evidence: unicode-standard
verified at: 2026-08-01
certainty: context-dependent

subject: 文字コード(キャラクターエンコーディング)
predicate: uses
object: UTF-8
description: 現代のWindows実務では新規テキストの第一候補としてUTF-8を使う
evidence: https://learn.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/understanding-file-encoding
verified at: 2026-08-01
certainty: established

subject: 文字コード(キャラクターエンコーディング)
predicate: uses
object: UTF-16LE
description: Windows APIやPowerShellの一部の出力は既定でUTF-16LEを使う
evidence: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding
verified at: 2026-08-01
certainty: established

subject: 文字コード(キャラクターエンコーディング)
predicate: uses
object: CP932
description: 日本語Windowsのレガシーテキストは実務ではCP932として意識したほうが安全である
evidence: code-page-identifiers
verified at: 2026-08-01
certainty: established

subject: 文字コード(キャラクターエンコーディング)
predicate: uses
object: アクティブコードページ(ANSI/ACP)
description: Windowsの「ANSI」という表記は多くの場合そのマシンのアクティブコードページを指す
evidence: code-page-identifiers
verified at: 2026-08-01
certainty: established

subject: 文字コード(キャラクターエンコーディング)
predicate: uses
object: BOM(Byte Order Mark)
description: UTF-8やUTF-16のようなUnicode系の文字コードでは、仕様はBOMの有無まで決めて初めて運用ルールとして成立する(CP932のようなレガシーコードページにはBOMの概念自体がない)
evidence: unicode-standard
verified at: 2026-08-01
certainty: context-dependent

subject: 文字コード(キャラクターエンコーディング)
predicate: mayCause
object: 文字化け
description: 書き込み時と読み込み時で前提とする文字コードが一致しないと文字化けが起きる
evidence: definitions-characters
verified at: 2026-08-01
certainty: established

subject: UTF-8
predicate: implements
object: Unicode
description: UTF-8はUnicodeの符号点を1〜4バイトの可変長バイト列にエンコードする文字コードである
evidence: unicode-standard
verified at: 2026-08-01
certainty: established

subject: UTF-16LE
predicate: implements
object: Unicode
description: UTF-16LEはUnicodeの符号点を2バイト単位のリトルエンディアンでエンコードする文字コードである
evidence: unicode-standard
verified at: 2026-08-01
certainty: established

subject: CP932
predicate: incompatibleWith
object: UTF-8
description: 非ASCII文字を含む場合、同じバイト列をUTF-8として書きCP932として読む、またはその逆をすると、正しい文字列に戻らない(ASCII範囲のみのバイト列はどちらの前提で読んでも一致するため問題は表面化しない)
evidence: code-page-identifiers
verified at: 2026-08-01
certainty: context-dependent

subject: CP932
predicate: mayCause
object: 文字化け
description: UTF-8で書かれたバイト列をCP932の前提で読むと、別の文字列に見える文字化けが起きる
evidence: code-page-identifiers
verified at: 2026-08-01
certainty: context-dependent

subject: アクティブコードページ(ANSI/ACP)
predicate: incompatibleWith
object: UTF-8
description: 非ASCII文字を含むUTF-8のファイルをアクティブコードページの前提で読むと、文字化けが起きる
evidence: code-page-identifiers
verified at: 2026-08-01
certainty: context-dependent

subject: UTF-16LE
predicate: incompatibleWith
object: アクティブコードページ(ANSI/ACP)
description: UTF-16LEのログをアクティブコードページ前提のツールへ渡すと、NULバイトが混ざるなど文字化けの一種として見える
evidence: code-page-identifiers
verified at: 2026-08-01
certainty: context-dependent

subject: BOM(Byte Order Mark)
predicate: uses
object: Unicode
description: BOMはUnicodeが定めるU+FEFFという符号点をファイル先頭に置く目印である
evidence: unicode-standard
verified at: 2026-08-01
certainty: established

subject: PowerShellの文字コード既定値
predicate: uses
object: UTF-8
description: PowerShell 6以降では、すべてのテキスト出力の既定がutf8NoBOM(UTF-8 BOMなし)である(Windows PowerShell 5.1はコマンドレットごとに既定がそろっていない)
evidence: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding
verified at: 2026-08-01
certainty: context-dependent

subject: PowerShellの文字コード既定値
predicate: uses
object: アクティブコードページ(ANSI/ACP)
description: Windows PowerShell 5.1では、BOMのないファイルをGet-Contentやスクリプト読み込みでアクティブコードページとみなす(PowerShell 6以降はutf8NoBOMに統一されており該当しない)
evidence: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding
verified at: 2026-08-01
certainty: context-dependent

subject: PowerShellの文字コード既定値
predicate: requires
object: BOM(Byte Order Mark)
description: Windows PowerShell 5.1で、非ASCII文字を含むスクリプトファイルを実行する場合に限り、BOMがないとアクティブコードページとして読まれてスクリプトが壊れる(PowerShell 6以降はutf8NoBOMに統一されているため該当しない)
evidence: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding
verified at: 2026-08-01
certainty: context-dependent

subject: 改行コード
predicate: configuredBy
object: .gitattributes
description: Gitリポジトリで管理する場合、リポジトリ単位の改行コードの扱いは.gitattributesで固定できる(Git管理下にないテキストファイルの改行コードには関与しない)
evidence: gitattributes
verified at: 2026-08-01
certainty: context-dependent

subject: 文字化け
predicate: mayCause
object: 誤読内容の再保存によるデータ破損
description: 文字化けして見える内容に気づかずそのまま保存すると、元のバイト列が失われ表示崩れではなくデータ破損になる
evidence: definitions-characters
verified at: 2026-08-01
certainty: context-dependent