5

可能重复:
在 VB6 中显示 Unicode 文本(希伯来语等)的最佳选择是什么

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

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

4

3 回答 3

7

这是一个探索的教程。看看这篇文章的黑色垂直矩形

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

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

参考。此代码片段和参考更内嵌于 C++。您可以使用以下步骤在 Visual C++ 中关闭/打开 UNICODE:

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

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

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


关于在 VB 中显示 UNICODE 的好文章

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

使用 VB6 并显示非美国 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 起着至关重要的作用。正如汉斯所说,glyph不受支持的字体会产生一个矩形。所以你需要确保Font你选择的能够渲染字形。例如MS Sans Serif,字体不呈现ƒ(LATIN SMALL LETTER F WITH HOOK,2 字节 Unicode 值为 0x0192),因此您会在其位置看到一个细长的实心矩形框。但是在 Windows 上,很少有字体具有足够广泛的字符库来代表中文。

在以下代码中,字体名称 () 在运行时沿字体字符集设置

字符集属性:

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 形式。

在此处输入图像描述

经过以上所有的写作,我注意到了这篇MSDN文章。好吧,至少这是 VB 确认 :D

于 2012-12-29T11:35:33.547 回答
1

您需要的是使用“Unicode 感知”控件。VB6 只附带了其中的一些,但在 Vista 和更高版本或 XP(仅限平板电脑版,除非您使用此库的非 Ink redist 版本)中,InkEdit 控件可以做到这一点。

InkEdit1.Text = ChrW$(9646)

注意$which 表示一个函数返回一个字符串而不是一个嵌入其中的变体。

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

于 2012-12-30T10:04:22.367 回答
0

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

于 2012-12-29T10:52:25.463 回答