deletelazy

第 3420 号会员 /

回复了 创建的主题:

@jimmykuu 试过了不行,偶数个字的倒是可以,奇数个字的不行

回复了 创建的主题:

@jimmykuu 是,以前按照这种方式搞乱了一部分数据,现在能有什么办法修复吗?
以前是直接按 中文的utf8当成gbk去转utf8了,所以就乱码了

回复了 创建的主题:

@jimmykuu 站长,麻烦指点下

回复了 创建的主题:

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"

    "golang.org/x/text/encoding/simplifiedchinese"
    "golang.org/x/text/transform"
)

func Gbk2Utf(s string) (string, error) {
    bs := []byte(s)
    reader := transform.NewReader(bytes.NewReader(bs), simplifiedchinese.GBK.NewDecoder())
    res, err := ioutil.ReadAll(reader)
    if err != nil {
        return "", err
    }
    return string(res), nil
}

func Utf2Gbk(s string) (string, error) {
    bs := []byte(s)
    reader := transform.NewReader(bytes.NewReader(bs), simplifiedchinese.GBK.NewEncoder())
    res, err := ioutil.ReadAll(reader)
    if err != nil {
        return "", err
    }
    return string(res), nil
}

func main() {
    str := "你"

    s1, _ := Gbk2Utf(str)
    fmt.Println(s1)

    s2, err := Utf2Gbk(s1) // 转码失败

    fmt.Println(err, s2)
}

回复了 创建的主题:

是,我现在改成你这样的了,但是我想知道为什么会导致这个异常崩溃的呢?而且不是必现,运行了一段时间就出现这个问题了@stevewang

回复了 创建的主题:

感谢@stevewang, 刚才看了http的源码,确实是每个http连接都开一个goroutine来处理;但奇怪的是今天再用这个程序测试又正常了,太无语了。。