我在VB6应用程序中显示日文字符,系统区域设置为Japan,非Unicode程序的语言为日语。对GetACP()的调用正确返回日语932。当我将日语字符串插入我的控件时,它们显示为“ƒAƒtƒŠƒJ,Ì-”而不是“アフリカの女王”。如果我手动将Font.Charset设置为128,则它们会正确显示。
在VB6中确定给定LCID的正确Charset的最佳方法是什么?
答案 0 :(得分:2)
答案 1 :(得分:2)
扩展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
答案 2 :(得分:1)
第二种最好的方法是使用字体,font.charsets和启发式数据库,例如在这里完成:
http://www.example-code.com/vb/vb6-display-unicode.asp
(最好的方式是下船是VB6的下沉船)