如何在golang中将xml编码UTF-16转换为UTF-8

如何在golang中将xml编码UTF-16转换为UTF-8,xml,go,decoding,Xml,Go,Decoding,我的代码如下 xml_string = `<?xml version="1.0" encoding="UTF-16"?><a></a>` var req Request text := strings.NewReader(string(response)) nr, _ = charset.NewReaderLabel("utf-16", text) decoder := xml.NewDecoder(nr) err := decoder.Decode(&am

我的代码如下

xml_string = `<?xml version="1.0" encoding="UTF-16"?><a></a>`
var req Request

text := strings.NewReader(string(response))
nr, _ = charset.NewReaderLabel("utf-16", text)
decoder := xml.NewDecoder(nr)
err := decoder.Decode(&req)
xml\u字符串=``
var请求
text:=字符串。NewReader(字符串(响应))
nr,=字符集.NewReaderLabel(“utf-16”,文本)
解码器:=xml.NewDecoder(nr)
错误:=解码器。解码(&req)
顺便说一下,我得到了EOF错误和零解码响应。似乎无法正常工作。

导入“unicode/utf16”
import "unicode/utf16"
import "unicode/utf8"
import "bytes"

func DecodeUTF16(b []byte) (string, error) {

    if len(b)%2 != 0 {
        return "", fmt.Errorf("Must have even length byte slice")
    }

    u16s := make([]uint16, 1)

    ret := &bytes.Buffer{}

    b8buf := make([]byte, 4)

    lb := len(b)
    for i := 0; i < lb; i += 2 {
        u16s[0] = uint16(b[i]) + (uint16(b[i+1]) << 8)
        r := utf16.Decode(u16s)
        n := utf8.EncodeRune(b8buf, r[0])
        ret.Write(b8buf[:n])
    }

    return ret.String(), nil
}
导入“unicode/utf8” 导入“字节” func DecodeUTF16(b[]字节)(字符串,错误){ 如果len(b)%2!=0{ 返回“”,fmt.Errorf(“必须具有偶数长度字节切片”) } u16s:=制造([]uint16,1) ret:=&bytes.Buffer{} b8buf:=make([]字节,4) lb:=len(b) 对于i:=0;iimport“unicode/utf16” 导入“unicode/utf8” 导入“字节” func DecodeUTF16(b[]字节)(字符串,错误){ 如果len(b)%2!=0{ 返回“”,fmt.Errorf(“必须具有偶数长度字节切片”) } u16s:=制造([]uint16,1) ret:=&bytes.Buffer{} b8buf:=make([]字节,4) lb:=len(b) 对于i:=0;iu16s[0]=uint16(b[i])+(uint16(b[i+1])您好,谢谢您的回答。我可以知道我应该在哪里使用这个方法吗?我应该将xml\u字符串输入传递给这个方法吗?
xml\u字符串
在这里不是utf-16,除非它是编码类型为utf-16的文件内容。不,这不是我想要的。我想要的是将encoding=“utf-16”转换为“utf-8”因为go只在内部支持UTF 8。响应的类型是什么?[]字节?你的方法是中文。这个答案与我的问题无关。你好,谢谢你的回答。我可以知道我应该在哪里使用这个方法吗?我应该把xml\u字符串输入传递给这个方法吗?
xml\u字符串
这里不是utf-16,除非它是文件的内容,编码类型是utf-16。不,这不是我想要的。什么我想要的是将encoding=“UTF-16”转换为“UTF-8”,因为go只在内部支持UTF 8。响应的类型是什么?[]字节?您的方法响应汉字。这个答案与我的问题无关。