我有一个文本文件我(很确定)是用UTF16编码的,但我不知道如何在Julia中加载它。我是否必须将其作为字节加载,然后使用UTF16String
进行转换?
答案 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作为其第一个字符,这可能不是您想要的。