如何将Unicode字符转换为转义码

时间:2009-06-18 21:49:20

标签: unicode vb6 utf-8 rtf

所以,我有一堆像这样的字符串:{\ b \ cf12よろてそ}。我想我可以迭代每个字符并用unicode转义码(\ u ###)替换任何unicode( Edit:Any where where AscW(char) > 127 or < 0)。但是,我不确定如何以编程方式这样做。有什么建议吗?

澄清:

我有一个像{\ b \ cf12よろてそ}这样的字符串,我想要一个像{\ b \ cf12 [STUFF]}这样的字符串,当我查看rtf文本时,[STUFF]将显示为よろてそ。

2 个答案:

答案 0 :(得分:2)

您只需使用AscW()函数即可获得正确的值: -

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

注意与unicode的其他转义不同,RTF使用十进制签名的短int(2字节)表示形式的unicode字符。这使得VB6中的转换非常容易。

修改

正如MarkJ在评论中指出的那样,你只会对0-127之外的字符进行此操作,但是你也需要在0-127范围内给出一些其他字符特殊处理。

答案 1 :(得分:0)

另一种更迂回的方式是将MSScript.OCX添加到项目并与VBScript的Escape函数接口。例如

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

HTH