文字データについて質問です。

AIXやHP-UXやSolarisでマルチバイトのテキストファイルを作ったとします。
そのファイルに何の変更もされないようにしてIAマシンに持ってきてファイルをエディターで開いたとします。
私の想像では、エンディアンが違うから2バイト文字は文字化けするような気がします。
しかし、実際にはしません。
これはどうしてなのか、分かるサイトなどをご存知でしたら教えてください。
勝手ながらあやふやな情報はご遠慮ください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/03/05 18:18:11
  • 終了:--

回答(4件)

id:maq No.1

maq回答回数81ベストアンサー獲得回数52004/03/05 18:26:23

ポイント9pt

文字コードとエンディアンは無関係だからです。以上。

id:myawoo

文字コードとCPUという意味では関係ないと思います。

テキストデータのバイトの並び方ってどうなってるの?プラットフォームによって変わってくるの?という質問です。

何か勘違いしていますかね?

2004/03/05 19:02:59
id:yamazo No.2

yamazo回答回数66ベストアンサー獲得回数02004/03/05 18:28:56

ポイント1pt

CP/IPで2バイト以上のデータ量を持つデータを転送する際は、ビッグエンディアンで送る事に定められている、とありますが、こういう事でよろしかったでしょうか?

id:myawoo

残念ですが、これは全く関係ありません。

2004/03/05 19:04:02
id:aki73ix No.3

aki73ix回答回数5224ベストアンサー獲得回数272004/03/05 18:35:48

ポイント30pt

http://winfaq.jp/

Windows.FAQ - ウィンドウズ処方箋

UNIXのエディタといってもMULEを使用した場合を例にとると文字コードはEUCでもSJISでもJISでもUNICODEでも作成できますM-x FILECODING-SYSTEM等で変更可能です

また、IAマシンに持ってきた場合エンディアン自体は一緒です、命令コード体型のエンディアンが異なるだけでデータファイルのエンディアンは共通になります。

残るは文字コードですが一部の文字コードは最近のWindowsなどでは自動判別できますが、やはり判別できないものは化けてしまいます

コード体型が1つのファイル内で統一されているならば、比較的簡単に文字コードを判断することがで来ますが、Windows標準のエディタは貧弱なのか出来ませんね。ただ、ファイルの先頭に、UNICODEなどの識別用のバイトを埋め込んでいるので新しいWindows間では判断できます

id:myawoo

文字コードというか、テキストデータの仕様として、並び順は決まってるってことだと理解することにします。

ただ、私の場合文字データが格納されているメモリのダンプを他マシンに送ることを考えているのでやっぱり問題があるような気がしてきました。

やっぱり勘違いですかね?

折角ですが、文字コード判別とツールはまた別の話です。

2004/03/05 21:04:41
id:lloigor No.4

lloigor回答回数16ベストアンサー獲得回数02004/03/05 19:42:10

ポイント30pt

EUCやSJIS等の2byte文字であっても、データとしては1byteの文字型データの羅列として扱われます。

エディタやブラウザ等のプログラムがそれを解釈して2byte毎の区切りを判断しているわけです。

(そのため文字コードの判別に失敗すると「文字化け」が発生します)

1byteのデータの並びであるため、エンディアンは関係有りません。

単純に先頭から1byteずつ読み取って処理するだけです。

但し、UTF-16は16bit単位のデータですので8bit単位で配置する際にエンディアンが問題になります。

(規格上リトルエンディアンとビッグエンディアンの両方が許可されています)

そのため、テキストの先頭にBOMというデータを付加してそのデータがリトルエンディアンなのかビッグエンディアンなのかを示します。

BOMによってエンディアンの判別が可能ですので、エンディアンが異なるシステムにおいても文字化けは発生しません。

id:myawoo

ありがとうございます。

質問の仕方が悪く、そのものずばりの回答は無かったのですが自分の中での疑問は解決しました。

みなさんありがとうございました。

2004/03/05 21:09:11
  • id:shampoohat
    byte order と multibyte char

    multibyte charは、1byte単位のbyte streamに対して、文字集合からの符号化が定められているんですよね。
    byte orderの方は、2byteなど、1byteを超える型が、どういうふうに配置(上位アドレスに上位桁、下位アドレスに上位桁)されるかで、little endian / big endian になるのですが、3byte以上だと、「big endian とも little endianとも呼べない配列」が存在しうるのですよね。
    あと、些細な部分ですが、emacsenでの文字コード変換は、M-x set-buffer-file-coding-systemですよね。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません