Go语言的中文编码问题

原创
2012/08/22 08:34
阅读数 6.6K

昨天用Go语言写一个网页信息抓取程序,功能是抓取指定的URL,读取并分析网页里面的某段内容。程序里面有一句index:=strings.Index(line,"单位净值"),运行结果发现index=-1。数据明明存在,但却无法Index,怀疑是编码问题。尝试把"单位净值"改成UTF-8编码"\u5355\u4F4D\u51C0\u503C",结果仍然一样。

在Google和多次调试之后,终于搞明白了编码问题。原来,程序抓取的网页编码是GB2312,而Go程序里面默认的编码是ASCII,所以直接写中文"单位净值",它的编码格式还是ASCII,当然就无法匹配了。"单位净值"改成UTF-8编码,同样也是无效,UTF-8和GB2312也是无法匹配。正确的做法是,让抓取的内容和Index的内容编码一致。本案例中网页编码是GB2312,所以我只需要把"单位净值"转成GBK编码就好了。这里使用了中文编码的第三方包 code.google.com/p/mahonia。具体代码如下:

enc := mahonia.NewEncoder("gbk")
index:=strings.Index(s1,enc.ConvertString("净值"))

 这样处理,问题就解决了。

展开阅读全文
打赏
0
18 收藏
分享
加载中
我使用的是 win 64 go1.02
2012/08/30 09:48
回复
举报
qinhui99博主

引用来自“金和”的评论

我是在dos下运行的

我的测试环境是win xp32位,GO1.02,没有问题。另外,我的这篇文章不是解决中文显示问题的。在中文显示问题上,不一定需要强制使用mahonia包来编码。例如,linux下,直接在代码写中文都可以正常显示的。
2012/08/29 09:04
回复
举报
我是在dos下运行的
2012/08/28 21:20
回复
举报
qinhui99博主

引用来自“金和”的评论

我在windows下还是乱码

你是不是在IDE环境下运行的?例如,LiteIDE? Eclipse? 这两个IDE环境输出中文信息和DOS窗口下是不一样的。我的运行结果都是在DOS窗口运行产生的。
2012/08/28 17:02
回复
举报
我在windows下还是乱码
2012/08/28 13:06
回复
举报
  enc := mahonia.NewEncoder("gbk")
  fmt.Println(enc.ConvertString("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界"))
Hello, world; or Καλημρα κσ
2012/08/28 13:05
回复
举报
qinhui99博主

引用来自“金和”的评论

我执行了 go get code.google.com/p/mahonia
但是安装正确以后没有任何提示
import (
  "fmt"
  "os"
  "strings"
  "code.google.com/p/mahonia"
)
c:>go build
出现错误提示
.\main.go:8: imported and not used: "code.google.com/p/mahonia"

" imported and not used"这个错误是因为你引用的包没有被使用,所以go编译器报错。这个是go语言的特色。
2012/08/28 11:59
回复
举报
qinhui99博主

引用来自“金和”的评论

go get code.google.com/p/mahonia 这个是不是还要越狱?

忘了说,code.google.com用的https协议,正好是被墙掉了。要么翻qiang,要么先下载它的源代码,然后在/go/src/pkg下自己编译和安装它的源代码。例如,源代码放在C:\go\src\pkg\code.google.com\p\mahonia目录下,然后执行go install .
我的另一篇博客http://my.oschina.net/qinhui99/blog/66560可以参考。
2012/08/28 11:57
回复
举报
我执行了 go get code.google.com/p/mahonia
但是安装正确以后没有任何提示
import (
  "fmt"
  "os"
  "strings"
  "code.google.com/p/mahonia"
)
c:>go build
出现错误提示
.\main.go:8: imported and not used: "code.google.com/p/mahonia"
2012/08/28 11:13
回复
举报
go get code.google.com/p/mahonia 这个是不是还要越狱?
2012/08/28 09:08
回复
举报
更多评论
打赏
17 评论
18 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部