Quelle est la meilleure façon de déterminer le jeu de caractères correct pour un LCID donné lors de l'exécution en VB6?

StackOverflow https://stackoverflow.com/questions/377779

Question

Je suis des caractères japonais dans l'affichage d'une application VB6 avec les paramètres régionaux du système mis au Japon et la langue pour les programmes non Unicode comme japonais. Un appel à GetACP () retourne correctement 932 pour le japonais. Lorsque j'insère les chaînes japonaises dans mes contrôles qu'ils affichent comme « ƒAƒtƒŠƒJ,Ì- ‰ ¤ » plutôt que « ア フ リ カ の 女王 ». Si je mets manuellement à 128 l'Font.Charset ils affichent correctement.

Quelle est la meilleure façon de déterminer le jeu de caractères correct pour un LCID donné VB6?

Était-ce utile?

La solution

Élargir la réponse de Bob, voici un code pour obtenir le jeu de caractères par défaut actuel.

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

Autres conseils

La deuxième meilleure façon est d'utiliser une base de données des polices, font.charsets et heuristiques, comme cela se fait ici:

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

( meilleurs moyen est de descendre du navire en perdition qui est VB6)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top