• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:やはり文字コードのせいでしょうか?)

Win98とWin2000で文字化けする問題は文字コードのせい?

このQ&Aのポイント
  • Win2000で文字化けする問題の原因として、文字コードの違いが考えられます。
  • 16bit(2バイト)のUnicode文字コードと、8bit(1バイト)の文字コードでは、バイト数は同じでも表現できる文字の範囲が異なります。
  • Win2000上でデバッカを使用し、文字コードの違いによる文字化けが確認できる場合があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • pikacchu
  • ベストアンサー率44% (11/25)
回答No.2

こんにちは。 的を得ていなくてすみません。 入力データを把握する意味で、入力データを全て16進で表示させてみては如何ですか? for(i = 0; i < 1024; i++) printf(" %02x", *(pt+i) & 0xff); Win環境でプログラムを作ったことが最近ないので、一緒に悩んでしまってごめんなさい。 (^^;

socrates
質問者

お礼

pikacchuさん。ありがとうございます。 ダンプ出力して調べてみた結果、UnicodeではなくJISでした。(ホストマシンが古いので)少し容量が増えていたのも、漢字の開始、終了に伴う0x1b,0x24,0x40などのコードでした。JISコードは他の文字と領域が重なるため漢字の開始、終了に専用のコードが挿入されるのをすっかり忘れていました。何はともあれダンプのアイデアで解決できました。でもWin98環境ではどうして動いていたんだろう・・・?

socrates
質問者

補足

ははぁ、なるほど。 ファイルから読み込んだダンプリストとストリームから読み込んだデータのダンプを比べてみれば違いがわかりそうですね。 私もCプログラムが久しぶりなので思いつきませんでした。ちょっとやってみます。でも、違いがわかってもUnicodeだった場合の変換といおうか文字列の扱いはどうしたらいいんでしょうか・・。

その他の回答 (1)

  • pikacchu
  • ベストアンサー率44% (11/25)
回答No.1

こんにちは。 初歩的なことでもうしわけないですが、"tmpbuff"は'\0'(ヌル)で初期化されていますか? ローカル変数と仮定すると起こりえるかと・・・

socrates
質問者

補足

省略したソースなのでご心配をおかけしました。 作業用の配列はすべてmemsetで初期化しております。 memset(tmpbuff,'\0',1024); fgets()で読み込んでいるのですが、どうも漢字の部分が容量が増えている気配があります。(正確には数えていませんが・・) Unicodeではストリームで読み込んだデータに何か付加する仕様になっているのでしょうか?半角数字は変化がないようです。 以上、よろしくお願いします。

関連するQ&A