Come convertire i caratteri Unicode in codici di escape
Domanda
Quindi, ho un sacco di stringhe come questa: {\ b \ cf12 & # 12424; & # 12429; & # 12390; & # 12381; }. Sto pensando di poter iterare su ogni personaggio e sostituire qualsiasi Unicode ( Modifica: Qualunque cosa AscW(char) > 127 or < 0
) con un codice di escape Unicode (\ u ###). Tuttavia, non sono sicuro di come farlo a livello di programmazione. Qualche suggerimento?
Chiarimento:
Ho una stringa come {\ b \ cf12 & # 12424; & # 12429; & # 12390; & # 12381; } e voglio una stringa come {\ b \ cf12 [STUFF]}, dove [STUFF] verrà visualizzato come & # 12424; & # 12429; & # 12390; & # 12381; quando visualizzo il testo RTF.
Soluzione
Puoi semplicemente usare la funzione AscW () per ottenere il valore corretto: -
sRTF = "\u" & CStr(AscW(char))
Nota a differenza di altre escape per Unicode, RTF utilizza la rappresentazione int decimale con segno decimale (2 byte) per un carattere Unicode. Il che rende la conversione in VB6 molto semplice.
Modifica
Come sottolinea MarkJ in un commento, lo faresti solo per i personaggi al di fuori di 0-127, ma dovrai anche dare ad altri personaggi all'interno della gamma 0-127 anche una gestione speciale.
Altri suggerimenti
Un altro modo più indiretto sarebbe aggiungere MSScript.OCX al progetto e interfacciarsi con la funzione Escape di VBScript. Ad esempio
Sub main()
Dim s As String
s = ChrW$(&H3088) & ChrW$(&H308D) & ChrW$(&H3066) & ChrW$(&H305D)
Debug.Print MyEscape(s)
End Sub
Function MyEscape(s As String) As String
Dim scr As Object
Set scr = CreateObject("MSScriptControl.ScriptControl")
scr.Language = "VBScript"
scr.Reset
MyEscape = scr.eval("escape(" & dq(s) & ")")
End Function
Function dq(s)
dq = Chr$(34) & s & Chr$(34)
End Function
La routine principale passa nei caratteri giapponesi originali e l'output di debug dice:
%u3088%u308D%u3066%u305D
HTH