你正在使用的Go版本是(go version
)?
$ go version
go version go1.14 darwin/amd64
这个问题在最新版本的发布中是否会重现?
是的。
你正在使用的操作系统和处理器架构是什么(go env
)?go env
输出
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/mccolljr/Library/Caches/go-build"
GOENV="/Users/mccolljr/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/mccolljr/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/Users/mccolljr/go/src/github.com/golang/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/Users/mccolljr/go/src/github.com/golang/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/mccolljr/go/src/github.com/orthly/3oxz/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
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
(字节顺序标记为小端)编码存储在磁盘上:
<?xmlversion="1.0"encoding="utf-16"?>
<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 等)。
我是不是漏掉了什么?有没有办法在不修改输入字节的情况下做到这一点?
2条答案
按热度按时间von4xj4u1#
@rsc
czq61nw12#
我明白这是老生常谈,但是下面的内容对@mccolljr有帮助吗?
$x^{1}a_{0b}1x$