- - PR -
VBSで全角も1バイトとしてカウントされるようになってしまいました
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-22 10:23
こんにちは。
すみませんが、ご存知の方がいらっしゃったらご助言いただきたいです。 VBS(WSH)でSQL Server 2000からデータを抽出し、テキストファイルに 固定長で出力しているプログラムがあります。 それを5ヶ月ぶりに動かしたら、今まで全角・半角の区別(?)がうまく いっていたのに、全角の箇所でずれるようになってしまっていました。 DBデータの長さをカウントし、フィールドサイズに満たない場合は 半角スペースを入れているようなのですが、どうやら全角でも1バイトと してカウントしてしまっているようなずれ方なのです。 ちなみにDBの該当フィールドはnvarcharです。 9月までは問題なく桁ずれも発生しませんでした。 突然できなくなったのは、パッチ等の影響なのかと思いまして、何か ご存知でしたら教えていただけますか? よろしくおねがいします。 | ||||||||
|
投稿日時: 2008-02-22 17:49
> DBデータの長さをカウントし、フィールドサイズに満たない場合は
> 半角スペースを入れているようなのですが ここ具体的にはどうやっているんですか? WSHは内部的にはunicode処理のはずですが。 | ||||||||
|
投稿日時: 2008-02-24 19:09
文字数とバイト数を混同しているものとおもわれ...。
| ||||||||
|
投稿日時: 2008-02-26 09:20
ありがとうございます。
そうなんですよね、文字数とバイト数の区別が突然うまく いかなくなってしまったそうなんです。 もちろん書き方が悪いのだとは思いますが、それでも 今までうまくいっていたらしいのに・・・と思った訳です。 具体的な書き方については、確認しますのでしばしお待ち下さい。 すみませんが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-03-11 12:03
遅くなりまして、申し訳ありません。
確認したところ、ASC関数を使用してShift-JISのバイト数 カウントしている箇所の結果が、変わってしまったようです。 if Asc(文字列) >= 0 and Asc(文字列) < 256 then 1バイトと判定 else 2バイトと判定 end if 以前はこれでうまくいっていたのですが、いつからか2バイト 文字も1バイトと判定されるようになっていました。 ちなみに試したところ、ASC関数に全角文字を設定すると、 何を入れても「63」が返ってきます。 63をCHR関数にかけると、「?」となりました。 asc("あ")=63 chr("63")=? 全角文字が「?」として認識されてしまうようになった、 ということでしょうか?? 何らかのパッチの影響かどうか、ご存知の方はいらっしゃいますか? すみませんが、ご助言いただけると助かります。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-03-11 12:36
VBSのことはよく分からないけど、
AscWって使える? または使用したら、どんな結果を返す? 参考:Asc 関数(microsoft.com) 追記: ひろれいさんの指摘より、URLから改行除去。できたかな? [ メッセージ編集済み 編集者: かずくん 編集日時 2008-03-11 21:22 ] | ||||||||
|
投稿日時: 2008-03-11 13:41
かずくんさん、ありがとうございます。
AscWを試したところ、全角文字を設定しても、Ascのように 同じ値が返ってくることはありませんでした。 AscW("あ")=12354 AscW("い")=12356 AscW("う")=12358 Unicodeなんですよね、この値は。 でもこのソースを使うとなると、Shift-JISじゃないと 1バイトか2バイトかは判定できないですよね。 私、あまり文字コードに詳しくないのですが・・。。 | ||||||||
|
投稿日時: 2008-03-11 14:49
本当ですか? 私の環境(XP SP2)では、マイナス値が返ってきますね。 実行 VBS 。
#かずくんさん、リンク先アドレスに改行コードが入ってますね(^_^;) ASC 関数 |