9646
在 VB6 中显示 unicode 字符(BLACK VERTICAL RECTANGLE)的正确方法是什么?
当我尝试ChrW(9646)
它时显示?
.
9646
在 VB6 中显示 unicode 字符(BLACK VERTICAL RECTANGLE)的正确方法是什么?
当我尝试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
。(关闭)
当您在 a中使用textbox
控件时Form
,将其添加Microsoft Forms 2.0 Object Library
为参考库。该组件提供支持Unicode的控件,例如:文本框、标签、命令按钮、列表框、组合框、复选框、单选按钮、切换按钮、图像、标签条和多页控件。
使用 VB6 并显示非美国 ANSI 字符,您需要了解 3 个主要内容:
转换后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
您需要的是使用“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
它显示问号的原因是该字符不存在于所使用的字体中。您需要将字体设置为支持 BLACK VERTICAL RECTANGLE的字体,例如 Arial Unicode MS 或 Lucida Sans Unicode。