OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

やはり文字コードのせいでしょうか?

  • 困ってます
  • 質問No.125500
  • 閲覧数34
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 77% (73/94)

固定長のテキストに区切り文字の","や"/"を挿入して整形する
プログラムを作っていたときWin98では正常に動作していましたが、
Win2000だと文字化けしてうまくいきません。
Unicodeとの文字コードの違いかな?とも思ったのですが、16bit
(2バイト)ということでバイト数は同じだと思うのですが、デバッカ
で見ると目的の位置より手前でカウントを終了しているようです。
というのもWin2000上ではデバッカのローカル変数をウオッチしても
変数内の漢字も文字化けしているため確認できません。

元のテキスト
"20010505文字列次の文字列1234"
こうしたい
"2001/05/05,文字列,次の文字列,12,34"
が、こうなる
"2001/05/05,文字・。・・次の文字・。、" (実際とは違います)


行儀が悪いプログラムなのですが、こんな感じです。
char kigou[7][2]={"/","/",","," ",":",":",""};
int skip[7]={4,2,22,12,2,2,2};

for(i=0;i<7;i++){
strncat(tmpbuff, pt, skip[i]);
tmpptr += skip[i];
strcat(tmpbuff,kigou[i]);
tmpptr += strlen(kigou[i]);
pt += skip[i];
}
コンパイラはBorlandC++Builder4です。
ファイルの整形だけなのでCの関数しか使っていません。
ご存知の方、回答よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル7

ベストアンサー率 44% (11/25)

こんにちは。
的を得ていなくてすみません。
入力データを把握する意味で、入力データを全て16進で表示させてみては如何ですか?

for(i = 0; i < 1024; i++)
printf(" %02x", *(pt+i) & 0xff);

Win環境でプログラムを作ったことが最近ないので、一緒に悩んでしまってごめんなさい。 (^^;
補足コメント
socrates

お礼率 77% (73/94)

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

お礼率 77% (73/94)

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

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 44% (11/25)

こんにちは。 初歩的なことでもうしわけないですが、"tmpbuff"は'\0'(ヌル)で初期化されていますか? ローカル変数と仮定すると起こりえるかと・・・ ...続きを読む
こんにちは。
初歩的なことでもうしわけないですが、"tmpbuff"は'\0'(ヌル)で初期化されていますか?
ローカル変数と仮定すると起こりえるかと・・・
補足コメント
socrates

お礼率 77% (73/94)

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

以上、よろしくお願いします。
投稿日時 - 2001-08-28 13:36:50
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ