无法处理具有不同编码的文件中的字符串[不接受答案]
Unable to process strings in files with different encoding [Not accepting answers]
我正在尝试处理特定文件中存在的字符串,该文件是用英语编写的。当文件的编码不同于“UTF-8”时,就会出现问题。但是编码为“UTF-16-le”的文件并不像预期的那样运行。我的主要目标是操作读取文件中的字符串。例如 strings.TrimSpace()
只适用于 UTF-8 文件,
我知道 golang 默认只支持 UTF-8,任何替代方法都会有所帮助。
个人问题
Also I would like to point out, many new programming languages, do process the strings irrespective of the encoding, And why does Go only support UTF-8. If at least there would be an alternative way to pass the encoding format to the reader, that might still help.
我试过的
- 我尝试使用 utf-8 和 utf-16 标准包
代码
(main.go)
显示差异的示例代码。
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func processFile(src string) {
data, _ := ioutil.ReadFile(src)
fmt.Println("--- original source ---")
fmt.Println(string(data))
fmt.Println(http.DetectContentType(data))
fmt.Println("\n--- modified source ---")
for _, val := range strings.Split(string(data), "\n") {
fmt.Println(strings.TrimSpace(val))
}
}
func main() {
processFile("./utf-16-english.txt")
processFile("./utf-8-english.txt")
}
文件-1
(utf-8-english.txt)
Hello
This is
Sample
Document
文件-2[=27=]
(utf-16-english.txt)
Hello
This is
Sample
Document
编辑
似乎唯一更好地处理字符串的方法是将它们转换为UTF-8。请参考标记的答案。
根据评论,我已将程序的结果写入相应的文件。并且不存在特殊符号,但是使用字符串的过程在 UTF-8
下工作正常
您必须解码 utf-16 编码的文件。解码会将输入转换为utf-8,之后您可以使用字符串库来处理输入。
你可以这样使用:
import "unicode/utf16"
func processFile(src string, decode func(in[]byte) string) {
data, _ := ioutil.ReadFile(src)
fmt.Println("--- original source ---")
fmt.Println(decode(data))
fmt.Println("\n--- modified source ---")
for _, val := range strings.Split(decode(data), "\n") {
fmt.Println(strings.TrimSpace(val))
}
}
func main() {
processFile("./utf-16-english.txt",func(in []byte) string {
return string(utf16.Decode(in)) })
processFile("./utf-8-english.txt",func(in []byte) string {
return string(in)})
}
我正在尝试处理特定文件中存在的字符串,该文件是用英语编写的。当文件的编码不同于“UTF-8”时,就会出现问题。但是编码为“UTF-16-le”的文件并不像预期的那样运行。我的主要目标是操作读取文件中的字符串。例如 strings.TrimSpace()
只适用于 UTF-8 文件,
我知道 golang 默认只支持 UTF-8,任何替代方法都会有所帮助。
个人问题
Also I would like to point out, many new programming languages, do process the strings irrespective of the encoding, And why does Go only support UTF-8. If at least there would be an alternative way to pass the encoding format to the reader, that might still help.
我试过的
- 我尝试使用 utf-8 和 utf-16 标准包
代码
(main.go)
显示差异的示例代码。
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func processFile(src string) {
data, _ := ioutil.ReadFile(src)
fmt.Println("--- original source ---")
fmt.Println(string(data))
fmt.Println(http.DetectContentType(data))
fmt.Println("\n--- modified source ---")
for _, val := range strings.Split(string(data), "\n") {
fmt.Println(strings.TrimSpace(val))
}
}
func main() {
processFile("./utf-16-english.txt")
processFile("./utf-8-english.txt")
}
文件-1
(utf-8-english.txt)
Hello
This is
Sample
Document
文件-2[=27=]
(utf-16-english.txt)
Hello
This is
Sample
Document
编辑
似乎唯一更好地处理字符串的方法是将它们转换为UTF-8。请参考标记的答案。
根据评论,我已将程序的结果写入相应的文件。并且不存在特殊符号,但是使用字符串的过程在 UTF-8
下工作正常
Hello
This is
Sample
Document
似乎唯一更好地处理字符串的方法是将它们转换为UTF-8。请参考标记的答案。
根据评论,我已将程序的结果写入相应的文件。并且不存在特殊符号,但是使用字符串的过程在 UTF-8
下工作正常您必须解码 utf-16 编码的文件。解码会将输入转换为utf-8,之后您可以使用字符串库来处理输入。
你可以这样使用:
import "unicode/utf16"
func processFile(src string, decode func(in[]byte) string) {
data, _ := ioutil.ReadFile(src)
fmt.Println("--- original source ---")
fmt.Println(decode(data))
fmt.Println("\n--- modified source ---")
for _, val := range strings.Split(decode(data), "\n") {
fmt.Println(strings.TrimSpace(val))
}
}
func main() {
processFile("./utf-16-english.txt",func(in []byte) string {
return string(utf16.Decode(in)) })
processFile("./utf-8-english.txt",func(in []byte) string {
return string(in)})
}