如何用 MACROMAN 编码解析 xml
How to parse xml with MACROMAN encoding
我正在尝试解析给定的 pom 内容但出现错误:xml:打开字符集“MACROMAN”:不支持的字符集:“MACROMAN”。
我试图通过设置 decoder.Strict = false 来禁用严格编码
但这也没有用。
Here 是 Go 游乐场 link,我在其中解析这个特定的 pom。任何 help/ref 将不胜感激。
<?xml version="1.0" encoding="MACROMAN"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.eclipse.vorto</groupId>
<artifactId>org.eclipse.vorto.parent</artifactId>
<version>0.10.0.M1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>generators</artifactId>
<name>Eclipse Vorto Code Generators</name>
<packaging>pom</packaging>
<modules>
<module>org.eclipse.vorto.codegen.thingworx</module>
<module>org.eclipse.vorto.codegen.javabean</module>
<module>org.eclipse.vorto.codegen.mqtt</module>
<module>org.eclipse.vorto.codegen.webui</module>
<module>org.eclipse.vorto.codegen.webdevice</module>
<module>org.eclipse.vorto.codegen.markdown</module>
<module>org.eclipse.vorto.codegen.ios</module>
<module>org.eclipse.vorto.codegen.latex</module>
<module>org.eclipse.vorto.codegen.bosch.things</module>
<module>org.eclipse.vorto.codegen.coap</module>
<module>org.eclipse.vorto.codegen.aws</module>
<module>org.eclipse.vorto.codegen.lwm2m</module>
<module>org.eclipse.vorto.codegen.prosystfi</module>
<module>org.eclipse.vorto.codegen.kura</module>
</modules>
</project>
`
这些是 Go 中 macintosh
编码的已知别名:
var nameMap = map[string]htmlEncoding{
// ...
"csmacintosh": macintosh,
"mac": macintosh,
"macintosh": macintosh,
"x-mac-roman": macintosh,
// ...
}
由于 macroman
不在该列表中,您可以使用 CharsetReader
功能字段通过设置
使用自定义别名列表
decoder.CharsetReader = charsetReader
其中 charsetReader
是:
func charsetReader(charset string, input io.Reader) (io.Reader, error) {
if isCharsetMacintosh(charset) {
return transform.NewReader(input, charmap.Macintosh.NewDecoder()), nil
}
return input, nil
}
var macNames = []string{
"macroman",
"csmacintosh",
"mac",
"macintosh",
"x-mac-roman",
}
func isCharsetMacintosh(charset string) bool {
charset = strings.ToLower(charset)
for _, n := range macNames {
if charset == strings.ToLower(n) {
return true
}
}
return false
}
如果您需要更多信息,此处的答案可能会对您有所帮助:Unmarshal an ISO-8859-1 XML input in Go。查看 charset.NewReaderLabel
函数的源代码并跟踪函数调用也很有帮助。
我正在尝试解析给定的 pom 内容但出现错误:xml:打开字符集“MACROMAN”:不支持的字符集:“MACROMAN”。 我试图通过设置 decoder.Strict = false 来禁用严格编码 但这也没有用。
Here 是 Go 游乐场 link,我在其中解析这个特定的 pom。任何 help/ref 将不胜感激。
<?xml version="1.0" encoding="MACROMAN"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.eclipse.vorto</groupId>
<artifactId>org.eclipse.vorto.parent</artifactId>
<version>0.10.0.M1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>generators</artifactId>
<name>Eclipse Vorto Code Generators</name>
<packaging>pom</packaging>
<modules>
<module>org.eclipse.vorto.codegen.thingworx</module>
<module>org.eclipse.vorto.codegen.javabean</module>
<module>org.eclipse.vorto.codegen.mqtt</module>
<module>org.eclipse.vorto.codegen.webui</module>
<module>org.eclipse.vorto.codegen.webdevice</module>
<module>org.eclipse.vorto.codegen.markdown</module>
<module>org.eclipse.vorto.codegen.ios</module>
<module>org.eclipse.vorto.codegen.latex</module>
<module>org.eclipse.vorto.codegen.bosch.things</module>
<module>org.eclipse.vorto.codegen.coap</module>
<module>org.eclipse.vorto.codegen.aws</module>
<module>org.eclipse.vorto.codegen.lwm2m</module>
<module>org.eclipse.vorto.codegen.prosystfi</module>
<module>org.eclipse.vorto.codegen.kura</module>
</modules>
</project>
`
这些是 Go 中 macintosh
编码的已知别名:
var nameMap = map[string]htmlEncoding{
// ...
"csmacintosh": macintosh,
"mac": macintosh,
"macintosh": macintosh,
"x-mac-roman": macintosh,
// ...
}
由于 macroman
不在该列表中,您可以使用 CharsetReader
功能字段通过设置
decoder.CharsetReader = charsetReader
其中 charsetReader
是:
func charsetReader(charset string, input io.Reader) (io.Reader, error) {
if isCharsetMacintosh(charset) {
return transform.NewReader(input, charmap.Macintosh.NewDecoder()), nil
}
return input, nil
}
var macNames = []string{
"macroman",
"csmacintosh",
"mac",
"macintosh",
"x-mac-roman",
}
func isCharsetMacintosh(charset string) bool {
charset = strings.ToLower(charset)
for _, n := range macNames {
if charset == strings.ToLower(n) {
return true
}
}
return false
}
如果您需要更多信息,此处的答案可能会对您有所帮助:Unmarshal an ISO-8859-1 XML input in Go。查看 charset.NewReaderLabel
函数的源代码并跟踪函数调用也很有帮助。