Vb6打印机对象打印日语

时间:2013-04-30 10:00:53

标签: object printing vb6

我想使用打印机(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代码页,所以它是有线的。当我尝试将系统设置为中文和韩文时,两种语言都是正常的,只有日语有这个问题。

2 个答案:

答案 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 contextprinting on it手动打印。

或者您可以search寻找其他解决方案,例如this one(我没试过)。