code.google.com/p/go.text/encoding/traditionalchinese包的big5编码问题

Big5不能编码'包'这个字符,但是可以解码该字符。

话说这个该放在这里吧?

共 4 个回复


jimmykuu

最好附上你的代码。

不应该放在这里,【反馈】是该发现Golang中国有问题的时候用的。

# 0

snake117

package main

import (
    "bytes"
    "code.google.com/p/go.text/encoding/traditionalchinese"
    "code.google.com/p/go.text/transform"
    "fmt"
    "io/ioutil"
)

func main() {
    b := bytes.NewBuffer(nil)
    w := transform.NewWriter(b, traditionalchinese.Big5.NewEncoder())
    w.Write([]byte(`eft">net包`))
    w.Close()

    u := make([]byte, b.Len())
    copy(u, b.Bytes())

    r := transform.NewReader(b, traditionalchinese.Big5.NewDecoder())
    x, _ := ioutil.ReadAll(r)

    fmt.Printf("%q\n", u)
    fmt.Println(string(x))
}

严格来说不完全是编码错误。traditionalchinese包的Big5自己是可以识别它的编码的,但是那个编码不能被doc、txt等文件格式识别。

它会把 编码为 \xFA\xBD

但是big5的标准双字节编码,第一个字节的范围是 \xA1 ~ \xF9

显然,如果go的big5编码不是出错,就是采用了一个更新但是不实用的编码标准。

老实说我觉得是出错了,新的编码标准应该兼容旧标准才对,可是常用字,没道理会在新标准里更改编码的。

# 1

woniu

目前问题:
big5编码能正确转换到utf8
utf8编码转换到错误的big5

目前解决办法:
修改 golang.org/x/text/encoding/traditionalchinese/tables.go 22111行

21253 - 11904: 0xFABD,

修改为:

21253 - 11904: 0xA55D,

英语能力有限,有能力的朋友可以帮忙解决下.

https://github.com/golang/go/issues/21910

# 3