按照惯例,文本文件 * 不能 * 包含不可打印字符(包括NUL)。如果文件包含这样的字符,它就不是文本文件--它是一个 binary 文件。 R strictly 1遵循这个约定,完全不允许使用NUL字符,你需要把数据当作二进制数据来读取和处理,这意味着使用readBin和raw数据类型:
n = file.size(filename)
buffer = readBin(filename, 'raw', n = n)
# Unfortunately the above has a race condition, so check that the size hasn’t changed!
stopifnot(n == file.size(filename))
1条答案
按热度按时间wlzqhblo1#
按照惯例,文本文件 * 不能 * 包含不可打印字符(包括NUL)。如果文件包含这样的字符,它就不是文本文件--它是一个 binary 文件。
R strictly 1遵循这个约定,完全不允许使用NUL字符,你需要把数据当作二进制数据来读取和处理,这意味着使用
readBin
和raw
数据类型:现在我们可以通过删除嵌入的零字节来修复缓冲区。这是假设UTF-x 或ASCII编码!其他编码可能嵌入了需要解释的零字节!
1也许太严格了......