2

我正在使用这个go 包,一切都很好。但得到了坏的汉字印刷品。我不擅长这种低级/硬件/编码的东西。所以有人提示我如何更正我的代码。

更新代码:</p>

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
}

更多细节

4

1 回答 1

1

这取决于您的环境。

如果你在 Windows CMD(只支持 UTF16 编码)中执行这个 Go 程序,你会看到奇怪的字符。
请参阅“如何使用 go 在 Windows 控制台中正确输出字符串? ”作为示例。
您需要在打印出这些字符之前对其进行转换。

于 2018-07-20T04:34:24.267 回答