go ``` encoding/xml: 无法处理未经手动操作源字节的utf-16编码文件 ```

uz75evzq  于 8个月前  发布在  Go
关注(0)|答案(2)|浏览(73)

你正在使用的Go版本是(go version)?

  1. $ go version
  2. go version go1.14 darwin/amd64

这个问题在最新版本的发布中是否会重现?
是的。
你正在使用的操作系统和处理器架构是什么(go env)?
go env 输出

  1. $ go env
  2. GO111MODULE=""
  3. GOARCH="amd64"
  4. GOBIN=""
  5. GOCACHE="/Users/mccolljr/Library/Caches/go-build"
  6. GOENV="/Users/mccolljr/Library/Application Support/go/env"
  7. GOEXE=""
  8. GOFLAGS=""
  9. GOHOSTARCH="amd64"
  10. GOHOSTOS="darwin"
  11. GOINSECURE=""
  12. GONOPROXY=""
  13. GONOSUMDB=""
  14. GOOS="darwin"
  15. GOPATH="/Users/mccolljr/go"
  16. GOPRIVATE=""
  17. GOPROXY="https://proxy.golang.org,direct"
  18. GOROOT="/Users/mccolljr/go/src/github.com/golang/go"
  19. GOSUMDB="sum.golang.org"
  20. GOTMPDIR=""
  21. GOTOOLDIR="/Users/mccolljr/go/src/github.com/golang/go/pkg/tool/darwin_amd64"
  22. GCCGO="gccgo"
  23. AR="ar"
  24. CC="clang"
  25. CXX="clang++"
  26. CGO_ENABLED="1"
  27. GOMOD="/Users/mccolljr/go/src/github.com/orthly/3oxz/go.mod"
  28. CGO_CFLAGS="-g -O2"
  29. CGO_CPPFLAGS=""
  30. CGO_CXXFLAGS="-g -O2"
  31. CGO_FFLAGS="-g -O2"
  32. CGO_LDFLAGS="-g -O2"
  33. PKG_CONFIG="pkg-config"
  34. GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/4g/0y_btbcj46v3x478swzt64140000gn/T/go-build229162746=/tmp/go-build -gno-record-gcc-switches -fno-common"

你做了什么?
我有一个文件,如下所示,以utf-16(字节顺序标记为小端)编码存储在磁盘上:

  1. <?xmlversion="1.0"encoding="utf-16"?>
  2. <SomeValidXML></SomeValidXML>

当我从磁盘读取该文件时,包括包含<?xml version="1.0" encoding="utf-16"?>的行的字节(utf-16编码)。
我想使用encoding/xml包解析整个文件,不进行任何修改。
你期望看到什么?
我期望能够A:将文件的字节转换为utf8并将该阅读器传递给xml.NewDecoder以成功解析utf8数据为xml,或者B:将utf16编码的字节传递给xml.NewDecider并提供一个CharsetReader以成功解析utf16数据为XML。
你看到了什么?
出现了一些错误情况。
1.当我直接将resultOfOsOpen传递给xml.NewDecoder时,无论是否将CharsetReader设置为charset.NewReaderLabel: XML syntax error on line 1: invalid UTF-8
2.当我将由charset.NewReader(resultOfOsOpen, "text/xml")返回的utf-8阅读器传递给xml.NewDecoder时: xml: encoding "utf-16" declared but Decoder.CharsetReader is nil
3.当我将由charset.NewReader(resultOfOsOpen, "text/xml")返回的xml.NewDecoder阅读器传递给CharsetReader,并将其设置为charset.NewReaderLabel时:(现在) utf-8编码的数据被解释为 x27n2x,解码器将文件读取为乱码。
在我看来,似乎x28n2x包希望包含x29n2x的行处于某种类似于有效的x30n3x编码文本的编码中,以便读取编码行并正确解析文件的其他部分,或者如果事先进行了手动输入转换,则删除该行(如使用无法作为有效x32n3x文本读取的 x33n3x 等)。
我是不是漏掉了什么?有没有办法在不修改输入字节的情况下做到这一点?

von4xj4u

von4xj4u1#

@rsc

czq61nw1

czq61nw12#

我明白这是老生常谈,但是下面的内容对@mccolljr有帮助吗?

$x^{1}a_{0b}1x$

相关问题