如何在 Julia 中加载 UTF16 编码的文本文件?
How do I load a UTF16-encoded text file in Julia?
我有一个文本文件(很确定)是用 UTF16 编码的,但我不知道如何在 Julia 中加载它。我是否必须将其作为字节加载,然后使用 UTF16String
进行转换?
最简单的方法是将其读取为字节然后转换:
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 作为其第一个字符,这可能不是您想要的。
我有一个文本文件(很确定)是用 UTF16 编码的,但我不知道如何在 Julia 中加载它。我是否必须将其作为字节加载,然后使用 UTF16String
进行转换?
最简单的方法是将其读取为字节然后转换:
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 作为其第一个字符,这可能不是您想要的。