golang中,怎么把为ascii码的中文,转换为对应的中文啊?

2014年11月23日源创会年度盛典(北京站)正在报名

有个apache的日志文件log.tx,里面有一段是中文文件名,下面红字的部分。。

2013-09-01 10:05:53|zhangyc_site_tag|200|application/pdf|attachment;filename= \xb6\xd4\xb6\xc0\xc1\xa2\xd1\xa7\xd4\xba\xbf\xc9\xb3\xd6\xd0\xf8\xb7\xa2\xd5\xb9\xce\xca\xcc\xe2\xb5\xc4\xcb\xbc\xbf\xbc__\xca\xa1\xc2\xd4_\xd1\xa7\xd4\xba_\xc1\xbd\xb8\xf6\xb6\xd3\xce\xe9_\xbd\xa8\xc9\xe8\xce\xca\xcc\xe2\xbd\xf8\xd0\xd0\xb7\xd6\xce\xf6_\xc8\xce\xba\xea\xcf\xbc.pdf |-|549240|-

这段红色的太长了,怎么转成对应的中文啊? php中只要eval一下就行了,

eval("\$str = \"".$str."\";" );
echo $str;

Go语言有对应的方法吗?

共 10 个回复


snake117

code.google.com/p/go.text/encoding等包可以满足你的要求。

# 0

Zhangyc310

哈哈,非常感谢! 我去试一试!

# 1

Zhangyc310

测试了一下,可以用[]byte(mystr)打印出[94 83……]这样的内码,怎么转换为有意义的中文呢?能给出一段代码吗?实在解决不了了!

# 2

jimmykuu

package main

import (
    "fmt"

    "code.google.com/p/mahonia"
)

func main() {
    s := "\xb6\xd4\xb6\xc0\xc1\xa2\xd1\xa7\xd4\xba\xbf\xc9\xb3\xd6\xd0\xf8\xb7\xa2\xd5\xb9\xce\xca\xcc\xe2"
    enc := mahonia.NewDecoder("gbk")
    fmt.Println(enc.ConvertString(s))
}
# 3

Zhangyc310

jimmykuu您好,这段代码非常有效,真不愧是专家啊,这样fmt能打印出来正常的字符串了,但log到日志文件的时候log.SetOutput(log_file),总是不能正常显示。

attachment; filename=Linuxæ<93><8d>ä½<9c>ç³»ç»<9f>å<9c>¨ARM9å¤<84>ç<90><86>å<99>¨ä¸<8a>ç<9a><84>移æ¤<8d>ç<8e><8b>æ<99><93>å®<81>.pdf ||-|| 7 |1| attachment; filename=Linux����ϵͳ��ARM9�������ϵ���ֲ������.pdf

这是什么原因啊?

enc := mahonia.NewDecoder("gb18030")
filename := enc.ConvertString(filename_orig)
fmt.Println(filename)

utf8 := mahonia.NewEncoder("UTF-8")
filename2 := utf8.ConvertString(filename_orig)
fmt.Println(filename2)

在屏幕上,filename可以正常的打印出正确的中文名,但utf8编码的filename2打印出来是乱码,log_file中的filename和filename2都是乱码,这该怎么解决啊?万分感谢!

# 4

David

@Zhangyc310 你的 console 显然是 GBK 的 encoding,显然无法正常显示 UTF-8 的编码呀。建议楼主恶补一下 encoding 相关的基础知识,也许 wikipage 是一个好的开始:http://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81

# 5

Zhangyc310

问题是,保存到log_file中,用sublime打开,也还是乱码啊!

# 6

Zhangyc310

@David,刚刚查看了一下,Mac下iTerm,console是UTF8编码的。

# 7

Zhangyc310

最新测试来了一下

import (
    "fmt"
    "log"
    "os"

    "code.google.com/p/mahonia"
)

func main() {
    var use_logfile bool
    use_logfile = true
    f, err := os.OpenFile("testlogfile", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("error opening file: %v", err)
    }
    defer f.Close()
    if use_logfile {
        log.SetOutput(f)
    }
    s := "\xb6\xd4\xb6\xc0\xc1\xa2\xd1\xa7\xd4\xba\xbf\xc9\xb3\xd6\xd0\xf8\xb7\xa2\xd5\xb9\xce\xca\xcc\xe2"
    enc := mahonia.NewDecoder("UTF-8")
    x := enc.ConvertString(s)
    gbk := mahonia.NewDecoder("gbk")
    n := gbk.ConvertString(s)
    log.Printf("file:", x, n)
    fmt.Println(x, n)
}

这样n保存到日志,mac上用sublime打开可以是中文,但服务器上类似的代码却还是有问题!我再测试一下,多谢啊!

# 8

Zhangyc310

多谢大家,原来utf8和gbk两种编码同时存在的文件,sublime打开是会出错的,用浏览器打开,选择编码后,是可以正常显示的!

# 9