go bug: fmt.Scanf("%s", &str)不能接受中文

kennethz · 2016-08-01 09:47:07 · 3023 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-08-01 09:47:07 的主题,其中的信息可能已经有所发展或是发生改变。

发现了go的一个bug: fmt.scanf("%s", &str)不能接受中文,只能接受ascii码.见下列代码:

package main

import (
    "fmt"
)

func main() {
    var (
        a   int
        f   float32
        str string
    )

    fmt.Println("准备录入数据: ")
    fmt.Scanf("%d,%f,%s", &a, &f, &str)
    fmt.Println("输出录入结果: ")
    fmt.Println(a, f, str)

}

如果输入 10,34.12,string

会正常输出10,34.12, string

但如果输入10,34.12,str中国

则只能输出10,34.12,str

也就是说: fmt.Scanf("%s",str)是不能直接输入utf-8 string的.


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3023 次点击  
加入收藏 微博
5 回复  |  直到 2017-02-08 07:59:51
kennethz
kennethz · #1 · 9年之前

备注:在ubuntu OS上运行正常,但是在win 7 64bit OS上不行.看起来是由于win7 os的cmd.exe不支持utf-8引起的,.中文win7 64bit os 的cmd window用的是gbk编码,不支持utf-8编码.

polaris
polaris · #2 · 9年之前

可以看下这里设置 http://studygolang.com/wiki/cmd_zh_code

kennethz
kennethz · #3 · 9年之前

用 chcp 65001只能解决utf-8字符显示的问题,但是输入还是不行.

winter
winter · #4 · 8年之前

我也发现同样的问题,请问楼主,有解决办法么?

winter
winter · #5 · 8年之前

在windows下,无论是Scanf还是bufio,的确是无法读入从键盘输入的中文。这个亲测,暂时没有找到解决办法。 但是同样的代码,在linux下却是ok的。 可能跟windows cmd/console字符集是GBK有关系

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传