【问题标题】:Vb6 Printer Object Print JapaneseVb6 打印机对象打印日语
【发布时间】:2013-04-30 10:00:53
【问题描述】:

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

我的项目是日文Windows环境(操作系统原为英文,设置日本地区及相关语言)。

我用Printer object打印一个简单的日文字符串类型如“レジースター”,代码如

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

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

谁可以在日文Windows Envrionment中使用Vb6 Printer Object成功打印出日文,请帮助我。

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

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

让我困惑的是Windows的默认ANSI。我们知道,Printer.Font.Charset 的默认值为 0,表示 ANSI(如果语言环境是日文则使用 code page 932,如果是英文则使用 Windows-1252)。

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

【问题讨论】:

    标签: object printing vb6


    【解决方案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 表示日语

    【讨论】:

    • 谢谢你的回答,我试过StrConv的方法。在我的系统不是日文的情况下也能正常工作,在我大学的帮助下终于找到了答案。
    【解决方案2】:

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

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

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

    您可以尝试通过creating a device contextprinting on it 手动打印。

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

    【讨论】:

    • 先谢谢你的回复,但是我可以用日语存储我的项目。不知道是不是因为我的日文windows环境。事实上,日文存储在一个资源文件中,我加载资源文件并打印出来。我可以在中文环境中打印中文,但在日文环境中无法打印日文。我知道这可能是代码页问题,但我尝试将日文转换为 Unicode,但仍然无法正常工作...
    • “ANSI”一词在 Windows 开发中的使用方式令人困惑。它表示 Windows 上的当前代码页。如果 Windows 设置“非 Unicode 程序的语言”设置为日语,则当前代码页将为日语,并且日语文本应该可以工作。在发送到打印机、写入文件等之前,字符串将被转换为日语代码页。
    • 谢谢你的解释,我看过一些关于Vb6 Encoding的文档。我知道 vb6 会自动将 unicode 转换为当前的 ANSI。我尝试了“将日语字符串写入文件”和“打印输出”。我可以在 txt 文件中显示日文(写入时),所以它应该是我当前的日文 Windows 代码页:932(日文 Shift-JIS),(PS:我的操作系统是英文设置日文环境)但是当我尝试使用打印机对象进行打印,它似乎由 Windows 1252(我的英语操作系统默认代码页)编码。我设置了正确的字体,我对此感到困惑。
    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多