Как преобразовать символы Юникода в экранирующие коды - PullRequest
3 голосов
/ 19 июня 2009

Итак, у меня есть несколько таких строк: {\ b \ cf12 よ ろ て そ}. Я думаю, что мог бы перебрать каждый символ и заменить любой юникод ( Edit: Anything, где AscW(char) > 127 or < 0) на escape-код Unicode (\ u ###). Тем не менее, я не уверен, как программно сделать это. Есть предложения?

Пояснение:

У меня есть строка типа {\ b \ cf12 よ ろ て そ}, и я хочу строку типа {\ b \ cf12 [STUFF]}, где [STUFF] будет отображаться как よ ろ て そ при просмотре текста в формате rtf.

Ответы [ 2 ]

2 голосов
/ 19 июня 2009

Вы можете просто использовать функцию AscW (), чтобы получить правильное значение: -

sRTF = "\u" & CStr(AscW(char))

Обратите внимание, что в отличие от других escape-кодов для юникода, RTF использует представление короткого целого (2 байта) с десятичным знаком для символа юникода. Что делает преобразование в VB6 действительно довольно простым.

Редактировать

Как отмечает MarkJ в комментарии, вы могли бы делать это только для символов за пределами 0-127, но тогда вам также нужно было бы дать некоторые другие символы внутри специальной обработки диапазона 0-127.

0 голосов
/ 30 июня 2009

Еще один обходной путь - добавить в проект файл MSScript.OCX и связать его с функцией Escape VBScript. Например

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

Подпрограмма Main передает оригинальные японские символы, а вывод отладки говорит:

%u3088%u308D%u3066%u305D

НТН

...