Object Vb6打印机对象打印日语

Object Vb6打印机对象打印日语,object,printing,vb6,Object,Printing,Vb6,我想在VB6项目中使用打印机(windows驱动程序)打印日语 我的项目是在日本的Windows环境下(操作系统最初是英文的,设置了日本地区和相关语言) 我使用打印机对象打印简单的日文字符串类型,例如“レジースター", 代码类似于 Dim s As String s="レジースター" Printer.Print s Printer.EndDoc 但输出结果是一组混乱的代码,如“,尽管VB6中的所有字符串都是Unicode(UTF-16),但当涉及到与世界VB6的接口时,它是完全

我想在VB6项目中使用打印机(windows驱动程序)打印日语

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

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

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

但输出结果是一组混乱的代码,如“,尽管VB6中的所有字符串都是Unicode(UTF-16),但当涉及到与世界VB6的接口时,它是完全非Unicode的

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

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

您可以尝试通过和手动打印


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

尽管VB6中的所有字符串都是Unicode(UTF-16),但当涉及到与世界的接口时,VB6是完全非Unicode的

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

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

您可以尝试通过和手动打印


或者您也可以使用另一种解决方案,例如(我没有尝试过)。

我在这类问题上使用的技巧是使用双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()函数,一个带有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表示日语

首先感谢您的回复,但我可以用日语存储我的项目。我不知道是不是因为我的日本Windows环境。事实上,日语存储在一个资源文件中,我加载资源文件并打印它们。我可以在中国环境下打印中文,但不能在日本环境下打印日语。我知道这可能是代码页的问题,但我尝试将日语转换为Unicode,但仍然不起作用……在Windows开发中,术语“ANSI”的使用方式令人困惑。它表示Windows上的当前代码页。如果Windows设置“非Unicode程序的语言”设置为日语,则当前代码页将为日语,日语文本应可用。字符串在发送到打印机、写入文件等之前将转换为日文代码页。感谢您的解释,我已经看过一些关于Vb6编码的文档。我知道vb6会自动将unicode转换为当前的ANSI。我尝试了“将日语字符串写入文件”和“打印输出”。我可以在txt文件中显示日语(写入时),因此它应该是我当前的日语Windows代码页:932(日语Shift JIS),(PS:my OS是英语设置的日语环境),但当我尝试使用Printer对象打印时,它似乎是由Windows 1252(我的英语OS默认代码页)编码的。我已经设置了正确的字体,我对此感到困惑。谢谢你的回复第一,但我可以用日语存储我的项目。我不知道是不是因为我的日本Windows环境。事实上,日语存储在一个资源文件中,我加载资源文件并打印它们。我可以在中国环境下打印中文,但不能在日本环境下打印日语。我知道这可能是代码页的问题,但我尝试将日语转换为Unicode,但仍然不起作用……在Windows开发中,术语“ANSI”的使用方式令人困惑。它表示Windows上的当前代码页。如果Windows设置“非Unicode程序的语言”设置为日语,则当前代码页将为日语,日语文本应可用。字符串在发送到打印机、写入文件等之前将转换为日文代码页。感谢您的解释,我已经看过一些关于Vb6编码的文档。我知道vb6会自动将unicode转换为当前的ANSI。我尝试了“将日语字符串写入文件”和“打印输出”。我可以在txt文件中显示日语(写入时),因此它应该是我当前的日语Windows代码页:932(日语Shift JIS),(PS:my OS是英语设置的日语环境),但当我尝试使用Printer对象打印时,它似乎是由Windows 1252(我的英语OS默认代码页)编码的。我已经设置了正确的字体,对此我感到困惑。谢谢你的回答,我已经尝试过StrConv方法。当我的系统不是日语的时候,它就可以工作了。在我的学院的帮助下,我终于找到了答案。谢谢你的回答,我已经尝试了StrConv方法。当我的系统不是日语时,它就工作了。在我的大学的帮助下,我终于找到了答案。