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

如何将Unicode字符转换为转义码,unicode,vb6,utf-8,rtf,Unicode,Vb6,Utf 8,Rtf,因此,我有一组字符串如下:{\b\cf12よろてそ } . 我想我可以迭代每个字符并用unicode转义码(\u######)替换任何unicode(编辑:任何AscW(char)>127或0。如果将它们作为整数,那么它们将显示为

因此,我有一组字符串如下:{\b\cf12よろてそ } . 我想我可以迭代每个字符并用unicode转义码(\u######)替换任何unicode(编辑:任何
AscW(char)>127或<0
)。但是,我不确定如何通过编程实现。有什么建议吗

澄清:


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

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

sRTF = "\u" & CStr(AscW(char))
注意:与unicode的其他转义不同,RTF对unicode字符使用十进制有符号短整数(2字节)表示。这使得VB6中的转换非常容易

编辑


正如MarkJ在一篇评论中指出的那样,您只能对0-127之外的字符执行此操作,但您还需要对0-127范围内的其他字符进行特殊处理。

另一种更迂回的方法是将MSScript.OCX添加到项目中,并与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
主例程传入原始日文字符,调试输出显示:

%u3088%u308D%u3066%u305D

HTH

在VB6中,所有字符串都是unicode,因此,您能否澄清一下,您是否认为您无意中读取的是UTF-8,就好像它是unicode或OEM页面代码一样?您为什么要这样做?您将如何处理带有这些转义码的字符串?@Anythony:我想要这样做,因为我有一些动态生成的字符串是将RTF和unicode混合在一起,这无法正确显示,因为RTF是8位格式。另一方面,其中一些字符串实际上是静态生成的字符串,将未转换的unicode和RTF混合在一起。您可以对127以上的所有字符值执行此操作。127和127以下的字符在所有代码页中都是相同的,并且可能会留下一个空白lone@MarkJ:同意,我应该指出,这个问题使用了256,这是错误的。0以下的数字也需要转换。@Brian:是的,同样,请再次调整答案:)Unicode代码点都>0。如果将它们作为整数,那么它们将显示为<0,因为VB6没有16位无符号数据类型。Also、 请务必说明代理对您应该知道Vista不支持MS脚本控件。所谓“不支持”,是指“不工作”还是“如果它坏了,或者坏了o/S,没有人会帮助我”?