• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBScript ASC関数:文字エンコード(Unicode→Shif)

VBScript ASC関数:文字エンコード(Unicode→Shift-JIS)多対一変換について

このQ&Aのポイント
  • VBScriptのASC関数でShift-JISコード表示時に起こる多対一変換の問題と解決方法について説明します。
  • 多対一変換をしないようにするためには、APIのwidechartomultibyte関数の設定を変更することが必要です。
  • VBScriptのASC関数と同じ動作をするように関連付けるか、別途プログラムを作成する方法が検討されています。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

ASC関数の結果をCHR関数で文字に戻して、元の文字と一致しなければ ? にするというのはどうでしょうか。

VBScriptingMan
質問者

お礼

目から鱗でした!! 難しく考えていると 案外簡単な方法を見落としてしまうんですね。。。 とても助かりました。有り難うございます。

その他の回答 (1)

回答No.1

Function IsValidChar(s1, encoding) Dim s Dim obj If Len(s1) <> 1 Then Err.raise End If Set obj = createObject("ADODB.Stream") obj.Open obj.Charset= encoding obj.WriteText(s1) obj.Flush() obj.Position = 0 s = obj.ReadText(-1) obj.Close() If s <> s1 Then isValidChar = False Exit Function End If isValidChar = True End Function Sub Main() Dim src Dim dst Dim i src = "あいうÀabc" dst = "" For i = 0 to Len(src) - 1 If IsValidChar(Mid(src,i + 1,1),"Shift_JIS") Then dst = dst & Mid(src,i + 1,1) Else dst = dst & "?" End If Next Msgbox(dst) End Sub Main() 'Windows APIを調べるのが面倒なので '一文字ずつ地道にチェック。 '個人的にASC関数があまり好きではない。多分デフォルトの符号化方式に頼っているあたり。(なんかASCWとASCを比較する人が出そうだなぁ) 'なので、俺はADODB.Streamを選ぶ。これちゃんとみんなのところに入ってるんだろうか?

VBScriptingMan
質問者

お礼

私のPCでは、ADODB.Stream入っていました。 玄人さんですね。 すばらしいです。 具体的にASC関数で不味い事例がわかれば、ベストアンサーでした。 とりあえず、Chr で戻して比較という案でやってみて、何かおきたらこちらの方法に切り替えたいと思います。 とても助かりました。有り難うございます。

関連するQ&A

専門家に質問してみよう