[1760] Re:DIKSAM_book_0_4のLinuxでの実行結果について (その2)
投稿者:(ぱ)こと管理人
2011/12/22 03:47:16
>入力ソースは1行だけで、 println("あいうえおbb");
ええとですね。
>まだ、マルチバイト無しのエラー系は完璧には動作していません。
「マルチバイト無しのエラー系」が動かないのではなくて、「マルチバイトありの正常系」が動かない、というのが現状ということでしょうか?
そうだとして、
>パラメタのst_string_literal_bufferは、”\240「,ヲィbb”で化けております。
>入力ソースは1行だけで、 println("あいうえおbb");
st_string_literal_bufferをデバッガで見たのだと思いますが、それだと、バイト列をデバッガが表示するところで文字化けが起きるので、渡ってきている正確なバイト列はわからないと思います。
ただ、いずれにしてもbbまで出ているわけですから、入力ファイルの、ダブルクォートが始まってから終わるまでの文字列は、dvm_mbstowcs_len()にまで届いているように見えま
す。(たぶんですが。バイト数が違うっぽいのが結構怪しいですが)
>①~③までの役割は以下の解釈であっているでしょうか?
> ①は、マルチバイト処理用、
> SJISコードの漢字の範囲のコードが来たら2バイト単位で
> リテラルに取り上げる所
> ②は、1バイト処理用
> リテラル文字を1バイト単位でリテラルに取り上げる箇所
> ③は、②の続きで、
> コンパイル時の指定文字コードがSJISだった場合、
> 2バイト目に0x5cを持つ可能性がある1バイト目が来た場合、
> 次の2バイト目も一緒にリテラルに吸上げる所
これは合っていますけど、いずれにしてもこの処理は、「入力ファイルの、ダブルクォートが始まってから終わるまでのバイト列」を、間違いなくdvm_mbstowcs_len()に届けるための処理でしかありません。0x5cのような変な文字が来なければ、あまり意識しなくてよいはずのところです。
そこで確認ですが、
①入力ファイルの文字コードは何でしょうか? od -cxかなにかでバイト列は取得できますか?
②dvm_mbstowcs_lenに渡す直前の、st_string_literal_bufferのバイト列は取得できますか? st_string_literal_buffer[0]~[12]までの値はわかりますか?
そこまでわかったら、正確なバイト列がdvm_mbstowcs_len(の中のmbrtowc)に渡ったと仮定できますから、環境変数LANGが何であるのかとかの話になるのかと思います。