【问题标题】:How do I load a UTF16-encoded text file in Julia?如何在 Julia 中加载 UTF16 编码的文本文件?
【发布时间】:2015-05-05 19:22:45
【问题描述】:

我有一个文本文件(很确定)是用 UTF16 编码的,但我不知道如何在 Julia 中加载它。我是否必须将其加载为字节,然后使用UTF16String 进行转换?

【问题讨论】:

  • 只是好奇,在 bash 提示符下,file your_text_filefile -i your_text_file 说了什么?
  • "Little-endian UTF-16 Unicode 英文文本,行很长,带有 CRLF、LF 行终止符"

标签: unicode encoding julia


【解决方案1】:

最简单的方法就是将其读取为字节,然后进行转换:

s = open(filename, "r") do f
    utf16(readbytes(f))
end

请注意,utf16 还会检查字节顺序标记 (BOM),因此它将处理字节顺序问题,并且不会在生成的 s 中包含 BOM。

如果你真的想避免复制数据,并且你知道它是本地字节序,这也是可能的,但是你必须明确地编写一个 NUL 终止符(因为 Julia UTF-16 字符串数据内部有一个最后的 NUL 代码点,用于传递给期望 NUL 终止数据的 C 例程):

s = open(filename, "r") do f
    b = readbytes(f)
    resize!(b, length(b)+2)
    b[end] = b[end-1] = 0
    UTF16String(reinterpret(UInt16, b))
end

但是,典型的 UTF-16 文本文件将以 BOM 开头,在这种情况下,字符串 s 将包含 BOM 作为其第一个字符,这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多