gpt4 book ai didi

vb6 - 在 VB6 中运行时确定给定 LCID 的正确字符集的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 12:01:59 25 4
gpt4 key购买 nike

我在 VB6 应用程序中显示日文字符,系统区域设置为日本,非 Unicode 程序的语言为日文。对于日语,对 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

关于vb6 - 在 VB6 中运行时确定给定 LCID 的正确字符集的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com