可能重复:
What’s the best option to display Unicode text (hebrew, etc.) in VB6
在VB6中显示unicode字符9646
(BLACK VERTICAL RECTANGLE)的正确方法是什么?
当我尝试ChrW(9646)
时,会显示?
。
答案 0 :(得分:6)
这是一个值得探索的tutorial。请查看本文的black vertical rectangle。
假设已启用Unicode,请将以下字符串发送到要显示的窗口:
Wchar_t mStr[] = {9646,0,0};
Reference。这个代码片段和引用更加内联C ++。您可以使用以下步骤在Visual C ++中关闭/打开UNICODE:
在VS2008 / 2010中打开您的项目;
在解决方案资源管理器中右键单击该项目,然后单击属性;
选择Configuration Properties-> General
,选择Character Set
并将current value
更改为Use Multi-Byte Character Set
。 (关闭)
好文章怀疑displaying UNICODE in VB 。
当您使用textbox
中的Form
控件时,请添加Microsoft Forms 2.0 Object Library
作为参考库。此组件提供Unicode支持的控件,例如:文本框,标签,命令按钮,列表框,组合框,复选框,单选按钮,切换按钮,图像,标签和多页控件。
使用VB6并显示非us-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的重要角色。正如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格式。
完成上述所有内容后,我发现了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。