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

Unicode 如何在Julia中加载UTF16编码的文本文件?,unicode,encoding,julia,Unicode,Encoding,Julia,我有一个文本文件,我确信它是用UTF16编码的,但我不知道如何在Julia中加载它。我是否必须将其加载为字节,然后使用UTF16String进行转换?最简单的方法是将其读取为字节,然后进行转换: s = open(filename, "r") do f utf16(readbytes(f)) end 请注意,utf16还检查字节顺序标记(BOM),因此它将处理尾数问题,并且不会将BOM包含在结果的s中 如果您确实希望避免复制数据,并且您知道它是本机endian,这也是可能的,但是您必须

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

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

s = open(filename, "r") do f
    utf16(readbytes(f))
end
请注意,
utf16
还检查字节顺序标记(BOM),因此它将处理尾数问题,并且不会将BOM包含在结果的
s

如果您确实希望避免复制数据,并且您知道它是本机endian,这也是可能的,但是您必须显式地编写NUL终止符(因为Julia UTF-16字符串数据在内部的末尾有一个NUL代码点,用于传递给期望NUL终止数据的C例程):


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

只是好奇,在bash提示符下,
将您的\u文本\u文件归档
文件-i您的\u文本\u文件
说什么?Little-endian UTF-16 Unicode英文文本,具有很长的行,带有CRLF、LF行终止符
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