Possible Duplicate:
What’s the best option to display Unicode text (hebrew, etc.) in VB6
显示unicode字符9646
的正确方法是什么? (黑色垂直矩形)在 VB6 中?
当我尝试ChrW(9646)
时它显示?
.
最佳答案
这是一个tutorial探索。看看这篇文章的black vertical rectangle .
假设 Unicode 已打开,将以下字符串发送到窗口进行显示:
Wchar_t mStr[] = {9646,0,0};
Reference 。此代码片段和引用更符合 C++。您可以使用以下步骤在 Visual C++ 中关闭/打开 UNICODE:
在 VS2008/2010 中打开您的项目;
在解决方案资源管理器中右键单击该项目,然后单击“属性”;
选择
配置属性->常规
,选择字符集
并将当前值
更改为使用多字节字符集
。 (关闭)
关于 displaying UNICODE in VB 的好文章。
当您在Form
中使用textbox
控件时,请添加Microsoft Forms 2.0 对象库
作为引用库。该组件提供支持 Unicode 的控件,例如:文本框、标签、命令按钮、列表框、组合框、复选框、单选按钮、切换按钮、图像、选项卡条和多页控件。
使用 VB6 并显示非 us-ANSI 字符,您需要了解 3 个主要内容:
- VB6 在内部将字符串存储为 Unicode。
- 显示字符串时,标准 VB6 文本框和标签控件会执行从 Unicode 到 ANSI 的隐式(内部)转换。
- 标准 VB6 文本框和标签控件根据您可以指定的字符编码显示 ANSI 字节。
在 Unicode 到 ANSI
转换之后,VB6 会尝试根据控件的 Font.Charset
属性显示字符数据,如果保持不变,则等于ANSI 字符集。更改控件的 Font.Charset
会更改 VB6 解释“ANSI”字节的方式。换句话说,您告诉 VB6 将字节视为其他字符编码而不是“ANSI”。
例如考虑尝试在 英语
计算机上显示 Unicode 日语
字符串:您设置 Font.Charset = 128
(对于日语),但您的 Unicode字符串显示为所有问号字符。这是因为 VB6 首先尝试将日语 Unicode 字符串转换为 ANSI,即 Windows-1252对于英文计算机。日语字符在 Windows-1252 中无法表示。每个字符都无法转换并被替换为问号。 例如在 TextBox 控件的属性设置中选择日语脚本与在运行时设置 Font.Charset 相同。
正如Jukka所说字体
在显示UNICODEs中起着至关重要的作用,因为字体中字符的可用性。正如汉斯所说,不支持的字体生成一个矩形。因此,您需要确保您选择的字体
能够渲染字形。例如MS Sans Serif
字体不会渲染 f
(带钩的拉丁文小写字母 F,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中显示Unicode字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14080723/