AIXやHP-UXやSolarisでマルチバイトのテキストファイルを作ったとします。
そのファイルに何の変更もされないようにしてIAマシンに持ってきてファイルをエディターで開いたとします。
私の想像では、エンディアンが違うから2バイト文字は文字化けするような気がします。
しかし、実際にはしません。
これはどうしてなのか、分かるサイトなどをご存知でしたら教えてください。
勝手ながらあやふやな情報はご遠慮ください。
CP/IPで2バイト以上のデータ量を持つデータを転送する際は、ビッグエンディアンで送る事に定められている、とありますが、こういう事でよろしかったでしょうか?
残念ですが、これは全く関係ありません。
Windows.FAQ - ウィンドウズ処方箋
UNIXのエディタといってもMULEを使用した場合を例にとると文字コードはEUCでもSJISでもJISでもUNICODEでも作成できますM-x FILECODING-SYSTEM等で変更可能です
また、IAマシンに持ってきた場合エンディアン自体は一緒です、命令コード体型のエンディアンが異なるだけでデータファイルのエンディアンは共通になります。
残るは文字コードですが一部の文字コードは最近のWindowsなどでは自動判別できますが、やはり判別できないものは化けてしまいます
コード体型が1つのファイル内で統一されているならば、比較的簡単に文字コードを判断することがで来ますが、Windows標準のエディタは貧弱なのか出来ませんね。ただ、ファイルの先頭に、UNICODEなどの識別用のバイトを埋め込んでいるので新しいWindows間では判断できます
文字コードというか、テキストデータの仕様として、並び順は決まってるってことだと理解することにします。
ただ、私の場合文字データが格納されているメモリのダンプを他マシンに送ることを考えているのでやっぱり問題があるような気がしてきました。
やっぱり勘違いですかね?
折角ですが、文字コード判別とツールはまた別の話です。
EUCやSJIS等の2byte文字であっても、データとしては1byteの文字型データの羅列として扱われます。
エディタやブラウザ等のプログラムがそれを解釈して2byte毎の区切りを判断しているわけです。
(そのため文字コードの判別に失敗すると「文字化け」が発生します)
1byteのデータの並びであるため、エンディアンは関係有りません。
単純に先頭から1byteずつ読み取って処理するだけです。
但し、UTF-16は16bit単位のデータですので8bit単位で配置する際にエンディアンが問題になります。
(規格上リトルエンディアンとビッグエンディアンの両方が許可されています)
そのため、テキストの先頭にBOMというデータを付加してそのデータがリトルエンディアンなのかビッグエンディアンなのかを示します。
BOMによってエンディアンの判別が可能ですので、エンディアンが異なるシステムにおいても文字化けは発生しません。
ありがとうございます。
質問の仕方が悪く、そのものずばりの回答は無かったのですが自分の中での疑問は解決しました。
みなさんありがとうございました。
文字コードとCPUという意味では関係ないと思います。
テキストデータのバイトの並び方ってどうなってるの?プラットフォームによって変わってくるの?という質問です。
何か勘違いしていますかね?