知識マップ: Windows文字コード入門 - Linux連携で起きる文字化け
記事「Windows文字コード入門 - Linux連携で起きる文字化け」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsの文字化けは、CP932で保存したバイト列をUTF-8として読む、あるいはその逆というencodeとdecodeの前提のずれから生じ、方向によって崩れ方の症状が異なります。Windows PowerShellは5.1と7以降で既定のencodingが割れており、Out-FileがUTF-16LEを、Set-ContentがCP932を書くといった経路ごとの違いが事故の温床になります。Linux側はlocaleに従いUTF-8を前提に読むため、CP932やBOM付きUTF-8を渡すと文字化けやデータ破損につながり、WSLのように両者が同居する環境ではとくに起きやすくなります。元のバイト列が残っていればiconvやPowerShellで正しいencodingとして読み直し書き出すことで復旧できますが、誤読した内容を保存してしまうと復元できません。記事は新規ファイルをUTF-8第一候補にし、encoding自体をI/Oの契約として明文化する運用を推奨しています。
flowchart LR
accTitle: Windowsの文字化けとLinux連携の知識マップ
accDescr: 同じバイト列をCP932とUTF-8のどちらで読むかで文字化けの症状が変わること、BOMやUTF-16LEやコンソールのコードページが独立した層であること、PowerShellのバージョンで既定のencodingが異なること、iconvやPowerShellによる復旧とUTF-8を第一候補にする運用方針の関係を示す図
mojibake["文字化け"]
cp932["CP932"]
utf_8["UTF-8"]
utf_16le["UTF-16LE"]
bom["BOM(Byte Order Mark)"]
encoding_overwrite_corruption["誤読内容の上書き保存によるデータ破損"]
console_code_page["コンソールのコードページ"]
windows_powershell_5_1["Windows PowerShell 5.1"]
powershell_7["PowerShell 7"]
iconv["iconv"]
powershell["PowerShell"]
linux_locale["Linuxのlocale"]
wsl["WSL(Windows Subsystem for Linux)"]
encoding_as_interface["encodingをI/O契約として明文化する運用"]
utf8_first_policy["新規ファイルをUTF-8第一候補にする運用方針"]
cp932 -.->|"原因になり得る"| mojibake
utf_8 -.->|"原因になり得る"| mojibake
utf_16le -.->|"原因になり得る"| mojibake
bom -.->|"原因になり得る"| mojibake
mojibake -.->|"原因になり得る"| encoding_overwrite_corruption
console_code_page -.->|"原因になり得る"| mojibake
windows_powershell_5_1 -->|"利用する"| utf_16le
windows_powershell_5_1 -->|"利用する"| cp932
powershell_7 -->|"利用する"| utf_8
iconv -.->|"軽減する"| mojibake
powershell -.->|"軽減する"| mojibake
mojibake -->|"で確認できる"| iconv
linux_locale -.->|"利用する"| utf_8
wsl -->|"利用する"| linux_locale
wsl -.->|"原因になり得る"| mojibake
encoding_as_interface -->|"推奨される対応"| mojibake
utf8_first_policy -->|"推奨される対応"| mojibake
概念間の関係(全17件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- CP932は文字化けの原因になることがあります。
- UTF-8は文字化けの原因になることがあります。
- UTF-16LEは文字化けの原因になることがあります。
- BOM(Byte Order Mark)は文字化けの原因になることがあります。
- 文字化けは誤読内容の上書き保存によるデータ破損の原因になることがあります。
- コンソールのコードページは文字化けの原因になることがあります。
- Windows PowerShell 5.1はUTF-16LEを利用します。
- Windows PowerShell 5.1はCP932を利用します。
- PowerShell 7はUTF-8を利用します。
- iconvは文字化けを軽減します。
- PowerShellは文字化けを軽減します。
- 文字化けはiconvで確認できます。
- LinuxのlocaleはUTF-8を利用します。
- WSL(Windows Subsystem for Linux)はLinuxのlocaleを利用します。
- WSL(Windows Subsystem for Linux)は文字化けの原因になることがあります。
- encodingをI/O契約として明文化する運用は文字化けに対する本記事の推奨です。
- 新規ファイルをUTF-8第一候補にする運用方針は文字化けに対する本記事の推奨です。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。