Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
日本語VB6で128~255のキャラを取得するには?
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=251#CommentId1765
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
やんやん
 (その他)
投稿日時
2009/1/21 09:42:45
やんやんと申します。
唐突で申し訳ないのですが…
#説明するのが下手なのですが、がんばって見ます。
環境:
OS:Windows XP pro SP3
VB:VB6 SP5(今更VB6かとお思いかもしれませんが…)
VB6では、日本語環境で使うと、128~255の文字が取得できないようですが、
ちょっと事情があり、取得したいのです、それも英語圏としての文字で
何がしたいかというと、例えば、Chr(130)は日本語だと文字列にすると
Unicodeで(0,0)(2バイト)になりますが、
コンパネ→地域と言語のオプション→詳細設定→Unicode対応でないプログラムの言語
で、「英語(米国)」を選らび、英語圏として動作させると、Chr(130)の文字列は
Unicodeで(26,32)となります。
Chr(131)なら(146,1)です。
上記のように、例えば130の値をStringの文字列にしたときに、英語圏と同じように
(26,32)、131なら(146,1)としたいのです。
http://www.kanaya440.com/contents/script/vbs/others/lcid.html
でStrConvでロケールIDを変更すれば出来るのかと思いましたが、出来ませんでした。
http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200706/200706_07060057.html
を見ると、英語圏ではEBCDICのようなので、コードページ変換テーブルをみて
WideCharToMultiByte等を使用してみても出来ませんでした。
(該当しそうなEBCDICのコードページ変換テーブルの値は試してみました)
http://homepage2.nifty.com/nonnon/SoftSample/SampleModADOS.html
も見ましたが、ちょっと事情があり試せませんでした。
ヒントやポインタでもいいので、「ここを見ればいい」とか「こうすればいい」
とか教えていただけないでしょうか?
以下に、試したソースを貼り付けます。
どなたかご教授頂きたく思います。
以上宜しくお願い致します。
・試したソース
---
Private Declare Function WideCharToMultiByte Lib "kernel32" _
(ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByRef lpMultiByteStr As Any, _
ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, _
ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" _
(ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByRef lpMultiByteStr As Any, _
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Private Sub Command1_Click()
Dim aaa() As Byte
Dim bbb() As Byte
Dim ccc(1) As Byte
Dim i As Integer
Dim tmpstr As String
Dim tmpstr2 As String
'Dim fileno As Integer
'
'fileno = FreeFile
'Open "C:\tmp\chren.txt" For Append As #fileno
'Print #fileno, Chr(130)
'Print #fileno, Chr(131)
'Close #fileno
'Open "C:\tmp\chrjp.txt" For Append As #fileno
'Print #fileno, Hex(130)
'Print #fileno, Hex(131)
'Close #fileno
'Debug.Print StrConv(CStr(Hex(130)), vbUnicode)
ccc(0) = &H1A
ccc(1) = &H20
Debug.Print Hex(130)
tmpstr = CStr(ccc)
Debug.Print tmpstr
bbb = StrConv(Hex(130), vbFromUnicode, 1033)
tmpstr = StrConv(Hex(130), vbFromUnicode, 1033)
Debug.Print ":" & tmpstr
For i = 0 To UBound(bbb)
Debug.Print bbb(i) & " ";
Next
Debug.Print vbCrLf
'aaa = tmpstr
tmpstr = CStr(130)
Debug.Print "tmpstr=" & tmpstr
'aaa = WCMB_Encode(20127, tmpstr)
'aaa = WCMB_Encode(500, tmpstr)
aaa = tmpstr
For i = 0 To UBound(aaa)
Debug.Print aaa(i); " " & Hex(aaa(i)) & " ";
Next
Debug.Print vbCrLf
'tmpstr = Chr(131)
'
'aaa = tmpstr
'aaa = WCMB_Encode(20127, "131")
tmpstr = "131"
aaa = tmpstr
For i = 0 To UBound(aaa)
Debug.Print aaa(i); " "; ' & Hex(aaa(i)) & " ";
Next
Debug.Print vbCrLf
' 26 1A 32 20
'
' 146 92 1 1
' 63 3F
' 49 0 51 0 49 0
End Sub
'---共通関数
' 関数名 : WCMB_Encode
' 返り値 : 出力文字データ
' 引き数 : cp : 出力文字データのコードページ番号
' : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データを指定のコードに変換する
' 備考 : WideCharToMultiByteによる文字コード変換
Private Function WCMB_Encode(ByVal cp As Long, ByRef strUni As String) As Byte()
On Error GoTo ErrHandler
Dim lngUniLen As Long
Dim lngBufLen As Long
Dim lngRtn As Long
Dim bytOut() As Byte
lngUniLen = Len(strUni)
If lngUniLen = 0 Then Exit Function
lngBufLen = lngUniLen * 5
ReDim bytOut(lngBufLen - 1)
lngRtn = WideCharToMultiByte _
(cp, 0, StrPtr(strUni), lngUniLen, bytOut(0), lngBufLen, vbNullString, 0)
If lngRtn Then
ReDim Preserve bytOut(lngRtn - 1)
WCMB_Encode = bytOut
End If
Exit Function
ErrHandler:
Debug.Print "文字コード変換エラー:" & Err.Description
End Function