我想使用打印机(Windows驱动程序)在vb 6项目中打印日语。
我的项目是日语Windows环境(操作系统是英语,最初设置日本地区和相关语言)。
我使用打印机对象打印日语的简单字符串类型,例如“レジースター”,代码如
Dim s As String
s="レジースター"
Printer.Print s
Printer.EndDoc
但输出结果是一组乱码,如“OEvƒOEƒ| [ƒg”
是否有人能够在日语Windows环境中使用 Vb6打印机对象成功打印日语,请帮助我。
最后找到关键很简单,这有点棘手,但我仍然不知道为什么。只需设置打印机对象的字体,如“Printer.Font.Charset = 128”(日语为128)
ATTN:请注意我的情况,我的操作系统是英语,语言和区域设置为日语。
让我困惑的是Windows的默认ANSI。我们知道,Printer.Font.Charset的默认值是0,它表示ANSI(如果语言环境是日语,那么它将使用代码页932,如果它是英语,它将使用Windows-1252)。
我的操作系统是日语(设置为日语,而不是纯粹的,原来是英语操作系统),当我尝试用日语编写文件时它可以显示日语,但是当我使用打印机对象打印时,它确实有0(ANSI .Font.Charset的值,但实际上它仍然使用原始的OS代码页,所以它是有线的。当我尝试将系统设置为中文和韩文时,两种语言都是正常的,只有日语有这个问题。
答案 0 :(得分:1)
我用过这样的东西的技巧是使用双StrConv()函数,一个是vbFromUnicode常量,另一个是vbToUnicode常量。
要做正确的实验需要进行,但它看起来应该是这样的,交换常量和/或代码页值,直到为系统获得正确的转换
Dim s as string
s="レジースター"
Dim newS as string
newS = StrConv((StrConv(s,FromUnicode,CodePage1),ToUnicode,CodePage2)
Printer.Print newS
CodePage * N *是Windows代码页值,英语为1252,日语为932
答案 1 :(得分:0)
尽管VB6中的所有字符串都是Unicode(UTF-16),但在与世界接口方面,VB6完全不是Unicode。
您无法将レジースター
存储在项目文件中,因为该文件是ANSI格式
您不能简单地将字符串传递给声明的API函数,因为它将首先自动转换为ANSI。为避免这种情况,您必须将字符串参数声明为指针。
Print
调用显然也是如此 - 字符串在到达打印机驱动程序之前会转换为当前的ANSI代码页。
您可以尝试creating a device context和printing on it手动打印。