[1] 
[DFN[内部表現]]、[DFN[内部コード]] ([DFN[内部符号]]) は、内部用の[[データ]]の[[表現][データ構造]]です。

[2] 
「内部」とは[[系]] ([[システム]]) の内側を表しますが、
具体的にどこからどこまで、どのような単位、粒度を同じ[[系]]の内側と見なすかは、
文脈によります。

[4] 
[[内部表現]]は[[情報処理]]に適した形態が選ばれます。
[[プラットフォーム]]や個々の実装によって異なり得ます。

* 内部コード (文字コード)

[FIG(short list)[ [5] [[内部コード]]の体系

- [[固定長EUC]]
- [[Mule内部コード]]
- [CODE[x-moe-internal]]
- [[i18n Arena internal encoding]]
- [[NULL終端]]
- [CODE[wchar_t]]
- [CODE[w3m-euc-japan]]
- [[[CODE[utf8]] (Perl)]]
- [[WTF-8]]
- [[UTF-16]]
- [[UCS-2]]
- [[UCS-4]]
- [[Unicodeの符号空間]]


]FIG]

[11] 
一般的な[[外部コード]]と同じものが[[内部コード]]として使われることもよくあります。

[12] 
[[Unicode]] と [[PUA]] や[[非文字]]を組合せて[[内部コード]]として使うこともあります。
[[WTF-8]] や [[surrogateescape]] など[[サロゲート]]を[[内部コード]]で使うこともあります。


[6] 一般的な[[文字コード]]規格を使うことがほとんどの[[外部コード]]と違って[[内部コード]]にはいろいろな特徴、
処理系特有の工夫があったりします。

[7] [[負数]]の[[文字コード]]で [[EOF]] その他の処理中の特殊機能を表すことがあります。
[[文字コード]]規格に含まれる[[制御文字]]とも違った役割を持ちます。

[14] どのような[[内部符号]]を使うにせよ、[[外部符号]]との接点で確実に変換する必要があります。
[[プログラミング言語]]の[[文字列型]]と[[バイト列型]]のように構造上明確に違いを表現できる[[プラットフォーム]]もあれば、
不明瞭な[[プラットフォーム]]もあるので、開発者は注意する必要があります。

[15] 
[[内部符号]]として特別な機能を持つ値が意図せず[[外部符号]]として入出力されないよう、
注意が必要です。さもなければ深刻な不具合、
ときに[[セキュリティー][文字のセキュリティー]]の問題を将来することになります。

;; [16] 特に >>12 のような場合にはこれを漏らしがちなので十分な注意が必要です。

-*-*-


[8] 
[[skf]] の[DFN[内部コード][skf内部コード]]は [[UTF-32]] と[[言語符号][skf言語]]で構成されます。
また、 [[EOF]] 等の処理用の符号をいくつか[[負数]]で利用しています。
[[サロゲート]]を本来と異なる内部処理用に使っています。
[SRC[[CITE[skf]] [CODE[skf_2.00.17.tar.xz]] の [CODE[doc/2.internal_code.txt]]]]



[9] [CITE[Re: User specified content type / w3mmee support]], [TIME[2004-06-23T04:22:48.000Z]], [TIME[2024-09-09T15:17:32.875Z]] <http://emacs-w3m.namazu.org/ml/msg00848.html>

[10] >>9 [[w3m-m17n]] の[[内部符号]]。 [[ISO/IEC 2022]], [[Big5]], [[GBK]],
[[Unicode]] などを扱い得る 1-6バイト可変長符号。

;; [13] 関連: [[w3m-euc-japan]]

* 関連

[3] 
[[情報処理]],
[[外部表現]],
[[文字コードの変換]],
[[文字列としてのバイナリーデータ]],
[[MSB]]


* メモ