当前位置: 首页 > 知识库问答 >
问题:

使用Go读取用UCS-2小端编码的文本文件

孔彭祖
2023-03-14

我有一个Go程序,可以读取类似以下代码的文本文件:

package main

import (
    "bufio"
    "log"
    "os"
)

func main() {
    file, err := os.Open("test.txt")

    if err != nil {
        log.Fatalf("failed opening file: %s", err)
    }

    scanner := bufio.NewScanner(file)
    scanner.Split(bufio.ScanLines)
    var txtlines []string

    for scanner.Scan() {
        txtlines = append(txtlines, scanner.Text())
    }

    file.Close()
}

游乐场:https://play.golang.org/p/cnDOEFaT0lr

该代码适用于所有文本文件,除了用UCS-2小端编码的文件。如何将文件转换为UFT8格式以读取它?

共有1个答案

申屠项明
2023-03-14

我有一个Go程序来读取文本文件。如何将[UCS-2 little endian]文件转换为UFT-8格式来读取?

统一码

常见问题解答:UTF-8、UTF-16、UTF-32

问:UCS-2和UTF-16有什么区别?

答:UCS-2是一个过时的术语,它指的是在替代代码点和UTF-16被添加到标准版本2.0之前,Unicode 1.1之前的Unicode实现。现在应该避免使用这个术语。

UCS-2没有描述不同于UTF-16的数据格式,因为两者都使用完全相同的16位代码单元表示。但是,UCS-2不解释代理代码点,因此不能用于一致地表示补充字符。

在过去,有时一个实现被标记为“UCS-2”,以表明它不支持补充字符,也不将代理代码点对解释为字符。这种实现不会处理字符属性、代码点边界、排序规则等的处理。补充字符。

UCS-2是UTF-16的适当子集。

例如

package main

import (
    "bufio"
    "fmt"
    "os"

    "golang.org/x/text/encoding/unicode"
)

func main() {
    // "Language Learning and Teaching" written in 16 or more languages: UCS-2
    // http://www.humancomp.org/unichtm/unilang.htm
    f, err := os.Open("unilang.htm")
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    defer f.Close()

    dec := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM).NewDecoder()
    scn := bufio.NewScanner(dec.Reader(f))
    for scn.Scan() {
        fmt.Println(scn.Text())
    }
    if err := scn.Err(); err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
}

游乐场:https://play.golang.org/p/3VombFxUNb1

 类似资料:
  • 我试图写. txt文件,它必须是UCS-2小端,但当我尝试 据我所知,它应该是相同的,但它不会在服务器上的特定应用程序中工作。当我在记事本中打开工作(手动创建)的文件时,它说它是“UCS-2 Little Endian”,但当它在Java中像这样创建时,它说“UCS-2 LE w/o BO”,服务器无法读取它。 我怎么能写出来呢?这是整个代码: 感谢您的任何建议。

  • 问题内容: 我正在尝试编写.txt文件,它必须是UCS-2 Little Endian,但是当我尝试 根据我的阅读,它应该是相同的,但在服务器上的特定应用程序中将无法使用。当我在Notepad ++中打开可以正常工作(手动创建)的文件时,它说它是“ UCS-2 Little Endian”,但是用Java这样创建时,它说“ UCS-2 LE w / o BO”,服务器无法读取它。 我该怎么写才能使

  • 在Node运行以下命令的Windows平台上

  • 正常的ASCII是正确的,但韩语字符不是。 所以我做了一个简单的程序来读取一个UTF-8文本文件并打印内容。 输出表示,字符在字符串、文字和文件中的编码是不同的。

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个

  • 问题内容: 我在使用BufferedReader时遇到问题 我想打印一个文本文件的6行: 现在,从每次调用readLine()方法可以收集到的信息开始,它都会自动前进到下一行。 所以我不能使用条件br.readLine()!= null,因为它已经将其前进了一行,并且我得到了输出: 我使用什么条件来检查文本字段中是否还有新行。 提前致谢! 问题答案: 这就是问题: 您有两次调用-第一个 仅 检查是