You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node.js读取WorldEdit的.schem格式文件

Node.js 读写.schem 二进制文件无修改解决方案

问题根源

.schem 是 Minecraft WorldEdit 采用的二进制 NBT 格式文件,大部分读写异常都是因为操作时误用了文本编码:默认情况下 fs.readFile 如果指定了 utf8、gbk 等文本编码,Node 会自动将二进制字节转为字符串,不符合文本编码规则的字节会被替换为乱码占位符,写回文件时就会破坏原始结构,导致 WorldEdit 无法识别。

正确实现代码

回调式读写

const fs = require('fs');

// 读取时不传入encoding参数,或显式传入null,返回值为原始二进制Buffer
fs.readFile('./test.schem', (err, schemBuffer) => {
  if (err) throw err;
  // 全程不要对schemBuffer执行toString()等文本转换操作
  fs.writeFile('./output.schem', schemBuffer, (err) => {
    if (err) throw err;
    console.log('文件写入完成,原始内容未修改');
  });
});

Promise 异步写法(Node 10+ 推荐)

const fs = require('fs/promises');

async function handleSchemFile(srcPath, outputPath) {
  // 直接读取得到原始二进制Buffer
  const schemBuffer = await fs.readFile(srcPath);
  // 直接写入Buffer即可
  await fs.writeFile(outputPath, schemBuffer);
}

上传场景注意事项

  • 若使用 Express、Koa 等框架处理.schem 文件上传,不要在对应接口上启用 express.text()、express.json() 等文本解析中间件
  • 推荐使用 multer 等专门的文件上传处理库,直接获取上传文件的原始 Buffer 进行存储,避免经过文本转换环节

内容的提问来源于stack exchange,提问作者Dorian Crutcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:54:06