如何在VB6中显示Unicode字符?

时间:2012-12-29 10:21:08

标签: unicode vb6 chr

  

可能重复:
  What’s the best option to display Unicode text (hebrew, etc.) in VB6

在VB6中显示unicode字符9646(BLACK VERTICAL RECTANGLE)的正确方法是什么?

当我尝试ChrW(9646)时,会显示?

3 个答案:

答案 0 :(得分:6)

这是一个值得探索的tutorial。请查看本文的black vertical rectangle

假设已启用Unicode,请将以下字符串发送到要显示的窗口:

Wchar_t mStr[] = {9646,0,0};

Reference。这个代码片段和引用更加内联C ++。您可以使用以下步骤在Visual C ++中关闭/打开UNICODE:

  1. 在VS2008 / 2010中打开您的项目;

  2. 在解决方案资源管理器中右键单击该项目,然后单击属性;

  3. 选择Configuration Properties-> General,选择Character Set并将current value更改为Use Multi-Byte Character Set。 (关闭)


  4. 好文章怀疑displaying UNICODE in VB

    当您使用textbox中的Form控件时,请添加Microsoft Forms 2.0 Object Library作为参考库。此组件提供Unicode支持的控件,例如:文本框,标签,命令按钮,列表框,组合框,复选框,单选按钮,切换按钮,图像,标签和多页控件。

    使用VB6并显示非us-ANSI字符,您需要了解3个主要内容:

    • 在内部,VB6将字符串存储为Unicode。
    • 显示字符串时,标准VB6文本框和标签控件执行从Unicode到ANSI的隐式(和内部)转换。
    • 标准VB6文本框和标签控件根据您可以指定的字符编码显示ANSI字节。

    Unicode-to-ANSI转换之后,VB6会尝试根据控件的Font.Charset属性显示字符数据,如果保持不变则等于ANSI字符集。更改控件的Font.Charset会改变VB6解释“ANSI”字节的方式。换句话说,你告诉VB6将字节视为一些其他字符编码而不是“ANSI”。

    例如考虑尝试在Unicode Japanese计算机上显示English字符串:您设置Font.Charset = 128(对于日语),但您的Unicode字符串显示为所有问号字符。这是因为VB6首先尝试将日语Unicode字符串转换为ANSI,这对于英语计算机来说是Windows-1252。日语字符在Windows-1252中无法表示。每个字符都无法转换,并替换为问号。 例如在TextBox控件的属性设置中选择日语脚本与在运行时设置Font.Charset相同。

    正如 Jukka所说 Font在显示字体中字符的可用性时,显示UNICODE的重要角色。正如Hans所说,glyph不支持的Font会产生一个矩形。因此,您需要确保您选择的Font能够渲染字形。对于例如MS Sans Serif字体不呈现ƒ(带有HOOK的LATIN SMALL LETTER F,2字节Unicode值为0x0192),因此您会在其中看到薄实心矩形框地点。但是在Windows上,很少有字体具有足够广泛的字符表示中文..

    在以下代码中,字体名称()在运行时沿着Font CharSet设置

    Charset属性:

    134     Simplified Chinese, gb2312 - Mainland China(PRC) and Singapore
    136     Traditional Chinese, big5 - Taiwan and Hong Kong
    

    代码:

    Sub changeToUniCodes()
    Dim strTxt2 As String    
    
    UserForm1.TextBox2.Font.Charset = 134    '--CHINESESIMPLIFIED_CHARSET
    UserForm1.TextBox2.Font.Name = ChrW(&H5B8B) + ChrW(&H4F53) '-- 宋体 SimSun font
    
    UserForm1.TextBox2.Text = ChrW(37446)
    strTxt2 = UserForm1.TextBox2.Text
    'notice that ChrW(9246) produces a different character in Chinese
    UserForm1.TextBox2.Text = strTxt2 & " " & ChrW(9246)
    End Sub
    

    VBE IDE中的输出:您也可以尝试使用VB6格式。

    enter image description here

    完成上述所有内容后,我发现了MSDN这篇文章。好吧,至少它是VB确认:D

答案 1 :(得分:1)

您需要使用“Unicode感知”控件。 VB6只附带了一些,但在Vista和更高版本或XP(仅限平板电脑版,除非您使用此库的非Ink redist版本)之前,InkEdit控件可以执行此操作。

InkEdit1.Text = ChrW$(9646)

注意$表示函数返回String而不是Variant,其中嵌入了一个。

InkEdit控件实际上是一个增强的RichTextBox,它支持墨迹输入以及在启用墨水的系统上键入。它也是一个Unicode控件,支持Unicode属性,如.Text

标准的MSHFlexGrid,DataGrid和一些其他控件也支持Unicode。

有关相关字符的字符,请参阅http://www.alanwood.net/unicode/geometric_shapes.html。您基本上可以忽略关于ANSI,Charset等的jibber-jabber。它是相关的但不适用于此。

▮ 9646 ▮ 25AE BLACK VERTICAL RECTANGLE

答案 2 :(得分:0)

显示问号的原因是该字符不在所使用的字体中。您需要将字体设置为one that supports BLACK VERTICAL RECTANGLE,例如Arial Unicode MS或Lucida Sans Unicode。