如何在Julia中加载UTF16编码的文本文件?

时间:2015-05-05 19:22:46

标签: unicode julia

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

1 个答案:

答案 0 :(得分:3)

最简单的方法是将其作为字节读取然后转换:

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

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

如果你真的想避免复制数据,并且你知道它是native-endian,那么这也是可能的,但你必须明确写一个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作为其第一个字符,这可能不是您想要的。