1

我想在 vb 6 项目中使用打印机(Windows 驱动程序)打印日语。

我的项目是在日文 Windows 环境中(操作系统最初是英文,设置日本地区和相关语言)。

我使用打印机对象打印一个简单的日文字符串类型,例如“レジースター”,代码如

  Dim s As String
  s="レジースター"
  Printer.Print s
  Printer.EndDoc

但输出结果是一组凌乱的代码,如“OEvƒOEƒ|[ƒg”

有谁能在日文 Windows环境中使用Vb6 Printer Object成功打印出日文,请帮助我。

终于找到钥匙很简单,有点棘手,但我仍然不知道为什么。只需将打印机对象的字体设置为“Printer.Font.Charset = 128”(日语为 128)

ATTN:请注意我的情况,我的操作系统是英语,语言和地区设置为日语。

让我困惑的是Windows的默认ANSI。众所周知,Printer.Font.Charset 的默认值为 0,表示 ANSI(如果语言环境是日文,则使用代码页 932,如果是英文,则使用 Windows-1252)。

我的操作系统是日语(设置为日语,不是纯粹的,最初是英语操作系统),当我尝试用日语编写文件时,它可以显示日语,但是当我使用打印机对象打印时,它确实有 0(ANSI) 值.Font.Charset,但实际上它仍然使用原始操作系统代码页,所以它是有线的。而当我尝试将系统设置为中文和韩文时,两种语言都正常,只有日文有这个问题。

4

2 回答 2

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

于 2013-05-02T11:59:24.443 回答
0

尽管 VB6 中的所有字符串都是 Unicode (UTF-16),但在与世界交互时,VB6 完全是非 Unicode。

您不能存储レジースター在您的项目文件中,因为该文件是 ANSI 格式的。
您不能简单地将字符串传递给已声明的 API 函数,因为它将首先自动转换为 ANSI。为避免这种情况,您必须将字符串参数声明为指针。

显然,Print调用也发生了同样的情况——字符串在到达打印机驱动程序之前被转换为当前的 ANSI 代码页。

您可以通过创建设备上下文在其上打印来尝试手动打印。

或者您可以搜索另一种解决方案,例如这个(我没有尝试过)。

于 2013-04-30T10:32:37.833 回答