我在与所述系统区域设置为日本和用于非Unicode程序作为日语的语言一个VB6应用程序中显示日文字符。到GetACP()的调用正确日本返回932。当我插入了日本串到我控制它们显示为“ƒAƒtƒŠƒJ,Ì-‰¤”,而不是“アフリカの女王”。如果我手动设置Font.Charset 128然后他们正确显示。

什么是确定正确的字符集在VB6给定的LCID?

最好的办法
有帮助吗?

解决方案

扩大Bob的答案,这里的一些代码来获取当前默认字符集。

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

其他提示

在第二个最好的方法是使用字体,font.charsets,和启发式的数据库,如在这里完成:

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

(该最好的方式是下车沉船即VB6)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top