我正在使用Go语言打印到POS打印机,但是打印出的中文字符质量不好。 (英语可以)

时间:2018-07-20 04:15:53

标签: go pos

我正在使用this go软件包,一切都很好。但是汉字打印不好。我不擅长这种底层/硬件/编码方面的事情。因此有人提示我如何更正我的代码。

更新代码:

func main() {
    testWindowPrinter()
}

func testWindowPrinter() {
    // all have bad prints
    printLines(simplifiedchinese.GBK.NewDecoder().Reader(strings.NewReader("你好")))
    printLines(simplifiedchinese.HZGB2312.NewDecoder().Reader(strings.NewReader("你好")))
    printLines(strings.NewReader("你好"))
}

func printLines(lines ...io.Reader) error {
    var defaultPrinter, err = printer.Default()
    if err != nil {
        log.Println(1, err.Error())
        return err
    }

    p, err := printer.Open(defaultPrinter)
    if err != nil {
        log.Println(2, err.Error())
        return err
    }
    defer p.Close()

    err = p.StartRawDocument("test")
    if err != nil {
        log.Println(3, err.Error())
        return err
    }
    defer p.EndDocument()

    err = p.StartPage()
    if err != nil {
        log.Println(4, err.Error())
        return err
    }

    // Am I doing right here?
    for i := range lines {
        var bf = new(bytes.Buffer)
        n, err := bf.ReadFrom(lines[i])
        if err != nil {
            println(err.Error())
        } else {
            println(n)
            fmt.Fprintln(p, bf.String())
        }
    }

    err = p.EndPage()
    if err != nil {
        log.Println(5, err.Error())
        return err
    }

    return nil
}

更多详细信息 zsbd

1 个答案:

答案 0 :(得分:0)

这取决于您的环境。

如果您正在Windows CMD(which only supports UTF16 encoding)中执行此Go程序,则会看到奇怪的字符。
请参见“ How to properly output a string in a Windows console with go?”作为示例。
您需要先转换这些字符,然后再打印出来。