如何在VB6中显示Unicode字符?

How to display Unicode characters in VB6?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Whata€?s the best option to display Unicode text (hebrew, etc.) in VB6

在VB6中显示Unicode字符9646(黑色垂直矩形)的正确方法是什么?

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


这里是要探索的教程。看看这篇文章中的黑色垂直矩形。

假设Unicode已打开,请将以下字符串发送到窗口以显示:

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

参考。此代码段和参考内容更内联C。使用以下步骤在Visual C中关闭/打开UNICODE的位置:

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

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

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

  • 在VB中显示UNICODE的好文章。

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

    使用VB6并显示非US-ANSI字符,您需要了解三点主要知识:

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

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

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

    正如Jukka所说,Font在显示字体中字符的可用性方面,在显示UNICODE方面起着至关重要的作用。正如汉斯所说,不受支持的glyph字体会产生一个矩形。因此,您需要确保选择的Font能够渲染字形。例如MS Sans Serif字体不会呈现?’(带有钩的拉丁文小写字母F,2字节Unicode值为0x0192),因此您将在其位置看到一个细的实心矩形框。但是,在Windows上,很少有具有足够大的字符库来表示中文的字体。.

    在下面的代码中,在运行时沿字体CharSet设置了字体名称()

    字符集属性:

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

    代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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


    您需要使用" Unicode感知"控件。 VB6仅随附其中一些,尽管在Vista和更高版本或XP中(除非您使用该库的非Ink Redist版本,否则只有Tablet Edition),InkEdit控件可以做到这一点。

    1
    InkEdit1.Text = ChrW$(9646)

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

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

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

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

    a–? 9646 a–? 25AE BLACK VERTICAL RECTANGLE


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