无法处理具有不同编码的文件中的字符串[不接受答案]

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.

我试过的

  1. 我尝试使用 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

编辑

  1. 似乎唯一更好地处理字符串的方法是将它们转换为UTF-8。请参考标记的答案。

  2. 根据评论,我已将程序的结果写入相应的文件。并且不存在特殊符号,但是使用字符串的过程在 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)})
}