如何按0-255 ASCII值读取文件?Node.js与Python实现
解决方案:按原始字节(0-255范围)读取游戏数据文件
Node.js 实现
问题根源就是你指定了utf8编码读取文件——Node.js会尝试把文件的原始字节解码为UTF-8字符,遇到无法被UTF-8识别的字节序列时,就会用替换字符�(对应的charCode是65533)来替代,这就导致你拿到的数值不对。
正确的做法是不指定编码,直接读取原始Buffer,Buffer本身就是0-255的字节集合,不需要额外转换:
const fs = require('node:fs'); fs.readFile('OUTDOOR.DAT', (err, buffer) => { if (err) { console.error(err); return; } // 将Buffer转换为0-255数值组成的数组 const chars = Array.from(buffer); console.log(chars); });
如果需要同步读取,也可以用fs.readFileSync:
const fs = require('node:fs'); try { const buffer = fs.readFileSync('OUTDOOR.DAT'); const chars = Array.from(buffer); console.log(chars); } catch (err) { console.error(err); }
Python 实现
Python中只需以二进制模式打开文件,读取到的bytes对象直接转成列表,每个元素就是0-255的整数:
with open('OUTDOOR.DAT', 'rb') as f: # 读取全部字节并转换为整数列表 chars = list(f.read()) print(chars)
如果需要逐字节处理(比如文件很大不想一次性读入内存),可以迭代读取:
chars = [] with open('OUTDOOR.DAT', 'rb') as f: byte = f.read(1) while byte: chars.append(ord(byte)) byte = f.read(1) print(chars)
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

