我正在写一个接受用户input的golang命令行程序。 此inputstring必须转换为UTF-8并发送到另一个服务器进行处理。 在Linux上,terminal编码几乎总是UTF-8,但在Windows中似乎不是这种情况。 我试图使用Windows设置代码页到65001
chcp 65001
并确保terminal字体设置为Lucida控制台。 但是,读取的字节
fmt.Scanf()
不是UTF-8格式。 我希望能够检测字符编码并将string转换为UTF-8。 同样,我应该能够在打印到屏幕之前从UTF-8转换为本地编码。
Python似乎有“locale”包,它可以获得默认编码,解码和编码string到任何指定的编码。 这对于golang有没有相同之处?
大部分的stackoverflow讨论都指向使用chcp 65001将windowsterminal上的编码改为UTF-8。 这似乎不适用于我。
func main() { foo := "" fmt.Printf("Enter: ") if _, err := fmt.Scanln(&foo) ; err != nil { fmt.Println("Error while scanning: ", err) } fmt.Printf("Scanned bytes: % x", foo) fmt.Println() }
在Linux上:
// ASCII $ go run test.go Enter: hello Scanned bytes: 68 65 6c 6c 6f // Unicode $ go run test.go Enter: © Scanned bytes: c2 a9 // Unicode $ go run test.go Enter: ΆΏΑΓΔΘΞ Scanned bytes: ce 86 ce 8f ce 91 ce 93 ce 94 ce 98 ce 9e ce a3 ce a8 ce a9 ce aa ce ad ce b1 ce b2 ce ba
在Windows上:
PS C:\> chcp Active code page: 437 PS C:\> go run .\test.go Enter: hello Scanned bytes: 68 65 6c 6c 6f PS C:\> go run .\test.go Enter: ΆΏΑΓΔΘΞ Scanned bytes: 3f 3f 61 // Change to Unicode PS C:\> chcp 65001 Active code page: 65001 PS C:\> go run .\test.go Enter: ΆΏΑΓΔΘΞ Error while scanning: EOF Scanned bytes:
欣赏任何帮助/指针。