【问题标题】:How to represent Unicode character in VB.Net String literal?如何在 VB.Net 字符串文字中表示 Unicode 字符?
【发布时间】:2011-03-09 19:31:18
【问题描述】:

我知道您可以将 Unicode 字符代码放入 VB.Net 字符串中,如下所示:

str = Chr(&H0030) & "More text"

我想知道如何将字符代码直接放入字符串文字中,以便我可以从设计器视图中使用 Unicode 符号。

这可能吗?

【问题讨论】:

    标签: vb.net string unicode designer


    【解决方案1】:

    要显示 Unicode 字符,可以使用以下语句

    1. ChrW(n) 其中n 是代表 de Unicode 字符的数字。
    2. Convert.ToChar(n)
    3. 使用Alt + N组合键在编辑器中直接输入字符
    4. 直接在编辑器中粘贴/复制 Unicode 字符
    5. Char.ConvertFromUtf32(n)
    6. 使用&#x....; 语法的XML 字符串

    分配♥字符的示例:

    s = ChrW(&H2665)
    s = Convert.ToChar(&H2665) 
    s = "♥" 'in typing Alt+2665
    s = "♥" 'using paste/copy of ♥ from another location
    s = Char.ConvertFromUtf32(&H2665)
    s = <text>I &#x2665; you</text>
    

    BUT 当 Unicode 字符大于 0xFFFF(C 语法更易读?)时,只有方法 4、5 和 6 有效!

    1. ChrW() 函数表示构建时出错
    2. Convert.ToChar() 函数在运行时崩溃
    3. Alt+N 被拒绝,因为它只接受 4 位数字

    例子

    lblCharacter.Text = "This solution works ?"
    Debug.Print (Char.ConvertFromUtf32(&H1F600))
    s = <text>diable: &#x1F608;</text>
    

    PS:直接在 Visual Studio 代码编辑器或 Notepad++ 中粘贴的笑脸 (0x1F600) 已失去背景颜色!说明:粘贴在此答案中的笑脸被橙色填充,但在 Visual Studio 编辑器或 Notepad++ 中,此颜色已消失!


    要在 Visual Studio 编辑器中使用字符串文字,您必须使用方法 3 或 4!

    在表单中(设计模式)

    在属性中(参见文本属性)

    【讨论】:

    • 我需要为我的应用程序发送 32 位代码。 Char.ConvertFromUtf32(n) 函数非常适合我。谢谢!
    【解决方案2】:

    我使用 字符映射 实用程序 (charmap.exe)。运行并选择控件字体中所需的字符,例如 ©Missico™,复制然后粘贴到属性网格中的 Text 属性中。您将不得不更改字体,因为表单的默认字体是“Microsoft Sans Serif”,它不是 Unicode 字体。我认为您不能将此方法用于不可打印的字符。

    根据您的需要,您还可以使用本地化,它为每种语言创建资源文件。同样,您将使用charmap.exe 选择并复制所需的字符并将它们粘贴到资源文件中。您可能可以使用不可打印的字符,例如制表符、换行符等,因为这只是一个文本文件 (Unicode)。

    【讨论】:

    • 当代码文件以不支持这些字符的字符集编写时,这不会解决问题 - 如果您的编辑器的字体不支持所有 Unicode 字符,则可能会导致问题.不是一个好的解决方案!
    • 但如果文件以 Unicode 编码(所有现代文本文件都应该如此)并且字体支持字符,那么它最好的解决方案。
    【解决方案3】:

    C# 语言通过转义支持这一点:

    var str = "\u0030More text";
    

    但这在 VB.NET 中不可用。请注意,您几乎肯定想要使用 Chr(),它适用于使用默认代码页的遗留代码。您将需要 ChrW() 并传递 Unicode 代码点。

    您的具体示例没有问题,&H0030 是“0”的代码,因此您可以简单地将其直接放在字符串文字中。

    Dim str As String = "0MoreText"
    

    您可以使用 Charmap.exe 实用程序复制和粘贴没有简单 ASCII 代码的字形。

    【讨论】:

    • \u0030 是一个普通的 0 - 0,其值为 48,等于 0x30,即请求的代码点,因为这些转义是用十六进制编写的。您可能在想十进制 30,\u001e,根据unicode.org/charts/PDF/U0000.pdf,它是一个称为记录分隔符(或Unicode 中的信息分隔符二)的控制字符。 (它确实作为代码点存在,但它没有字形,因为它是不可打印的字符。)
    • +1:用于向读者介绍 Character Map 实用程序 (charmap.exe)。我一直在使用的好技巧。
    【解决方案4】:

    将 Chr 替换为 Convert.ToChar:

    str = Convert.ToChar(&H0030) & "More text"
    

    【讨论】:

    • 使用它而不是其他答案中建议的较短的ChrW() 有什么好处吗?
    • 我相信 ChrW() 在实际调用 Convert.ToChar() 之前会进行额外检查。
    【解决方案5】:

    不,这是不可能的,因为 VB 字符串不支持转义序列。只需使用ChrW,这样可以多输入几个字符,但也更简洁。

    【讨论】:

    • 不是打字多,而是不能在表单设计器中完成,而且每次想看都要运行时,设计表单比较繁琐。
    【解决方案6】:

    我希望您可以使用 XML 文字和 XML 转义,但它不起作用。我认为 XML 文字不允许您使用 &amp;#NN;。虽然 it is a way 包括引号 " 在字符串中。

    'Does not compile :('
    Dim myString = _ 
    <q>This string would contain an escaped character &#30; if it actually compiled.</q>.Value 
    

    【讨论】:

    • 这在 2020 年在 Visual Studio 2019 上运行良好。稍后请参阅我的答案。我对编译没有任何问题。请再次测试并调整您的答案(我投赞成票)
    【解决方案7】:

    使用ChrW() 函数返回Unicode 字符。

    Dim strW As String
    strW = ChrW(&H25B2) & "More text"
    

    【讨论】:

    • 唯一的问题是它会中断需要多个 UTF-16 Chars 的逻辑字符。在 C# 中,"\Uxxxxxxxx" 带有大号 U 和 8 位数字来表示它们,它们一次转换为多个 Chars。要在 VB 中处理这些,您必须查找它们包含哪些代理字符并将它们编码为 ChrW(c1) &amp; ChrW(c2)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2013-06-21
    • 2011-11-30
    • 2022-11-11
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多