Go语言的中文编码问题

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

在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("净值"))

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