登录
首页 >  Golang >  Go问答

golang中tabwriter输出乱码和格式不准确

来源:stackoverflow

时间:2024-03-12 21:00:27 459浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《golang中tabwriter输出乱码和格式不准确》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在尝试使用制表符打印帮助消息:

func printhelp() {
    writer := tabwriter.newwriter(os.stdout, 100, 8, 1, ' ', 0)
    fmt.println(writer, "uni outputs unicode information for characters.")
    fmt.println(writer, "usage:")
    fmt.println(writer, "  uni \toutputs unicode info for the input.\t")
    fmt.println(writer, "\tprocesses u+xxxx sequences into the appropriate characters and treats control characters as control.\t")
    fmt.println(writer, "  uni raw \toutputs unicode info on the raw unporocessed input.\t")
    fmt.println(writer, "  uni decomp \toutputs the input with all characters composed.\t")
    fmt.println(writer, "  uni short \toutputs basic info about the input, one character per line.\t")
    fmt.println(writer, "  uni rawshort \toutputs basic info about the raw unprocessed input, one character per line.\t")
    fmt.println(writer, "  uni help\tprints this help message.\t")
    writer.flush()
}

但是,输出包含大量不应打印的内部垃圾,并且未正确对齐列。

这是我得到的:

&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []} uni outputs unicode information for characters.
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []} usage:
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}   uni     outputs unicode info for the input. 
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}  processes u+xxxx sequences into the appropriate characters and treats control characters as control.    
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}   uni raw     outputs unicode info on the raw unporocessed input. 
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}   uni decomp    outputs the input with all characters composed. 
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}   uni short   outputs basic info about the input, one character per line. 
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}   uni rawshort    outputs basic info about the raw unprocessed input, one character per line. 
&{0xc000006018 100 8 1 [32 32 32 32 32 32 32 32] 0 [] 0 {0 0 false} 0 [[]] []}   uni help   prints this help message.

这大概就是我想要的

uni outputs Unicode information for characters.
USAGE:
  uni            Outputs Unicode info for the input.
                        Processes U+xxxx sequences into the appropriate characters and treats control characters as control.
  uni raw        Outputs Unicdoe info on the raw unporocessed input.
  uni decomp       Outputs the input with all characters composed.
  uni short      Outputs basic info about the input, one character per line.
  uni rawshort   Outputs basic info about the raw unprocessed input, one character per line.
  uni help              Prints this help message.

我尝试过将最小单元格宽度更改为各种值,从 0 到数百,它改变了对齐方式,但没有达到正常工作的程度。我尝试过制表符与空格分隔符以及右对齐与默认(左)对齐,没有任何差异。


正确答案


要写入 io.writer,请使用 fmt.Fprintln(或 fmt.fprintf)而不是 fmt.Println

// fmt.Println(writer, "uni outputs Unicode information for characters.")

fmt.Fprintln(writer, "uni outputs Unicode information for characters.")

fmt.println 将尽最大努力只渲染每个参数 - 这就是为什么您会看到制表符的内部反射状态。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>