
VBScript ASC関数:文字エンコード(Unicode→Shift-JIS)多対一変換について
初めての質問です。
よろしくお願いいたします。
【質問】
VBScriptのASC関数で文字をShift-JISコード
表示した場合、多対一変換され、文字変換が起こります。
この多対一変換をしないように、もし対応する文字が無い場合は、
?になるようにしたいと思いますが、良い方法は無いでしょうか?
【現象】
ラテン1補助のÀ文字(A`)の
UnicodeとSift-JISコードのマップ対応が原因のようです。
具体的には、Àは、
Unicodeでは(A`)だが、Sift-JISコードでは(A)
にマップされているのです。
IMEパッドの文字コードをみるとわかります。
以下のサイトを見ると、さらに詳しく載っています。
▼参考サイト
第7回 Unicodeからの多対一の変換[前編]
http://gihyo.jp/admin/serial/01/charcode/0007
そこで、APIのwidechartomultibyte関数の
wc_no_best_fit_charsを設定したエンコード方式
を使用すれば解決するというところまでは、
わかってきたのですが、これをVBScriptのASC関数
と同じ動きをするように関連付けるか、別途プログラム
を作る方法がわからず困っています。
わかる方いらしたら、ご教授下さい。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
ASC関数の結果をCHR関数で文字に戻して、元の文字と一致しなければ ? にするというのはどうでしょうか。
目から鱗でした!!
難しく考えていると
案外簡単な方法を見落としてしまうんですね。。。
とても助かりました。有り難うございます。
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を選ぶ。これちゃんとみんなのところに入ってるんだろうか?
私のPCでは、ADODB.Stream入っていました。
玄人さんですね。
すばらしいです。
具体的にASC関数で不味い事例がわかれば、ベストアンサーでした。
とりあえず、Chr で戻して比較という案でやってみて、何かおきたらこちらの方法に切り替えたいと思います。
とても助かりました。有り難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# S-JIS → JIS コード変換するには 3 2023/02/09 23:55
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) 全角文字「ヴ」の半角文字「ヴ」への変換方法について 3 2022/11/05 12:07
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Ruby 英数字を含む文字列(0-9,A-Z)の桁数圧縮をするには 5 2022/06/28 18:15
- Excel(エクセル) Excelの操作方法を教えてください!頭文字2~8文字で特定の値に返す方法 8 2022/07/14 11:26
- Visual Basic(VBA) VBA B列にある前から10文字のみ表示 3 2023/08/07 11:24
- その他(Microsoft Office) Microsoft IME 一発で変換できない言葉がある 3 2022/07/19 19:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
std::stringからLPCWSTR型への変換
-
EBCDIC⇒SJIS変換の方法
-
VS 2008(VB.NET)
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
ExcelVBA実行後に時々落ちる
-
フォームのコントロールのバッ...
-
ふりがなをアルファベット化す...
-
JIS → S-JIS コード変換するには
-
CString ←→ BSTRの変換について
-
COBOLによる全角・半角混...
-
byte配列の内容をstringにコピ...
-
%fと%gについて
-
データベースの形式を認識でき...
-
Symfowareでのデータ型変換につ...
-
数字5桁文字コード?
-
数値のパック10進数の変換に...
-
S-JIS → JIS コード変換するには
-
VB初心者ですが教えてください...
-
テキストファイルをEUC_JPに変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
std::stringからLPCWSTR型への変換
-
ふりがなをアルファベット化す...
-
「彡」って文字はなんという文...
-
VS 2008(VB.NET)
-
フォームのコントロールのバッ...
-
ExcelVBA実行後に時々落ちる
-
sedで日本語の置換方法について
-
COBOLによる全角・半角混...
-
Excelマクロにて30分単位の計算...
-
Symfowareでのデータ型変換につ...
-
2バイト文字をJEFからSJISに変...
-
「髙(はしごたか)」を文字コー...
-
S-JIS → JIS コード変換するには
-
%fと%gについて
-
PL/SQLでSJISの文字コードを取...
-
JIS → S-JIS コード変換するには
-
RubyでUTF8のコード値を文字に...
-
英数字を含む文字列(0-9,A-Z)...
おすすめ情報