- PR -

VBSで全角も1バイトとしてカウントされるようになってしまいました

投稿者投稿内容
sak
会議室デビュー日: 2008/02/22
投稿数: 5
投稿日時: 2008-02-22 10:23
こんにちは。
すみませんが、ご存知の方がいらっしゃったらご助言いただきたいです。

VBS(WSH)でSQL Server 2000からデータを抽出し、テキストファイルに
固定長で出力しているプログラムがあります。

それを5ヶ月ぶりに動かしたら、今まで全角・半角の区別(?)がうまく
いっていたのに、全角の箇所でずれるようになってしまっていました。

DBデータの長さをカウントし、フィールドサイズに満たない場合は
半角スペースを入れているようなのですが、どうやら全角でも1バイトと
してカウントしてしまっているようなずれ方なのです。
ちなみにDBの該当フィールドはnvarcharです。

9月までは問題なく桁ずれも発生しませんでした。
突然できなくなったのは、パッチ等の影響なのかと思いまして、何か
ご存知でしたら教えていただけますか?

よろしくおねがいします。
ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2008-02-22 17:49
> DBデータの長さをカウントし、フィールドサイズに満たない場合は
> 半角スペースを入れているようなのですが

ここ具体的にはどうやっているんですか?
WSHは内部的にはunicode処理のはずですが。
ほったて
ベテラン
会議室デビュー日: 2007/11/10
投稿数: 68
投稿日時: 2008-02-24 19:09
文字数とバイト数を混同しているものとおもわれ...。
sak
会議室デビュー日: 2008/02/22
投稿数: 5
投稿日時: 2008-02-26 09:20
ありがとうございます。

そうなんですよね、文字数とバイト数の区別が突然うまく
いかなくなってしまったそうなんです。

もちろん書き方が悪いのだとは思いますが、それでも
今までうまくいっていたらしいのに・・・と思った訳です。

具体的な書き方については、確認しますのでしばしお待ち下さい。
すみませんが、よろしくお願いいたします。
sak
会議室デビュー日: 2008/02/22
投稿数: 5
投稿日時: 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")=?

全角文字が「?」として認識されてしまうようになった、
ということでしょうか??

何らかのパッチの影響かどうか、ご存知の方はいらっしゃいますか?
すみませんが、ご助言いただけると助かります。

よろしくお願いいたします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-03-11 12:36
VBSのことはよく分からないけど、
AscWって使える?
または使用したら、どんな結果を返す?

参考:Asc 関数(microsoft.com)

追記:
ひろれいさんの指摘より、URLから改行除去。できたかな?


[ メッセージ編集済み 編集者: かずくん 編集日時 2008-03-11 21:22 ]
sak
会議室デビュー日: 2008/02/22
投稿数: 5
投稿日時: 2008-03-11 13:41
かずくんさん、ありがとうございます。

AscWを試したところ、全角文字を設定しても、Ascのように
同じ値が返ってくることはありませんでした。

AscW("あ")=12354
AscW("い")=12356
AscW("う")=12358

Unicodeなんですよね、この値は。
でもこのソースを使うとなると、Shift-JISじゃないと
1バイトか2バイトかは判定できないですよね。

私、あまり文字コードに詳しくないのですが・・。。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2008-03-11 14:49
引用:

sakさんの書き込み (2008-03-11 12:03) より:

ちなみに試したところ、ASC関数に全角文字を設定すると、
何を入れても「63」が返ってきます。
63をCHR関数にかけると、「?」となりました。
asc("あ")=63
chr("63")=?

全角文字が「?」として認識されてしまうようになった、
ということでしょうか??


本当ですか?

私の環境(XP SP2)では、マイナス値が返ってきますね。

実行 VBS 。
コード:
Msgbox "あ=" & ASC("あ"),vbOkOnly+vbInformation,"情報"
Msgbox "亜=" & ASC("亜"),vbOkOnly+vbInformation,"情報"
Msgbox "A=" & ASC("A"),vbOkOnly+vbInformation,"情報"
Msgbox "ア=" & ASC("ア"),vbOkOnly+vbInformation,"情報"



#かずくんさん、リンク先アドレスに改行コードが入ってますね(^_^;)
ASC 関数

スキルアップ/キャリアアップ(JOB@IT)