3

システム ロケールを日本に設定し、Unicode 以外のプログラムの言語を日本語に設定して、VB6 アプリケーションで日本語の文字を表示しています。GetACP() を呼び出すと、日本語に対して正しく 932 が返されます。日本語の文字列をコントロールに挿入すると、「アフリカの女王」ではなく「ƒAƒtƒŠƒJ‚Ì—‰¤」と表示されます。Font.Charset を手動で 128 に設定すると、正しく表示されます。

VB6 で特定の LCID の正しい文字セットを決定する最良の方法は何ですか?

4

3 に答える 3

2

ボブの答えを拡張すると、現在のデフォルトの文字セットを取得するコードがいくつかあります。

Private Const LOCALE_SYSTEM_DEFAULT As Long = &H800
Private Const LOCALE_IDEFAULTANSICODEPAGE As Long = &H1004
Private Const TCI_SRCCODEPAGE = 2

Private Type FONTSIGNATURE
    fsUsb(4) As Long
    fsCsb(2) As Long
End Type

Private Type CHARSETINFO
    ciCharset As Long
    ciACP As Long
    fs As FONTSIGNATURE
End Type

Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" ( _
    ByVal Locale As Long, _
    ByVal LCType As Long, _
    ByVal lpLCData As String, _
    ByVal cchData As Long _
) As Long

Private Declare Function TranslateCharsetInfo Lib "GDI32" ( _
    lpSrc As Long, _
    lpcs As CHARSETINFO, _
    ByVal dwFlags As Long _
) As Long

Public Function GetCharset() As Long
On Error GoTo ErrorHandler

    Dim outlen As Long
    Dim lCodepage As Long
    Dim outBuffer As String
    Dim cs As CHARSETINFO

    outBuffer = String$(10, vbNullChar)
    outlen = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, outBuffer, Len(outBuffer))

    If outlen > 0 Then
        lCodepage = val(Left$(outBuffer, outlen - 1))

        If TranslateCharsetInfo(ByVal lCodepage, cs, TCI_SRCCODEPAGE) Then
            GetCharset = cs.ciCharset
        End If
    End If

    Exit Function

ErrorHandler:
    GetCharset = 0
End Function
于 2009-06-02T14:19:09.383 に答える
2

http://www.microsoft.com/globaldev/drintl/columns/014/default.mspx#E5Bを参照してください。

于 2008-12-25T06:17:48.760 に答える
1

2 番目に良い方法は、フォント、font.charsets、およびヒューリスティックのデータベースを使用することです。たとえば、次のようにします。

http://www.example-code.com/vb/vb6-display-unicode.asp

(一番いい方法はVB6である沈没船から降りることです)

于 2008-12-18T13:16:54.960 に答える