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

如何用JavaScript将混合非拉丁字符及特殊符号写入RTF文件

解决混合语言+特殊符号的RTF占位符替换编码问题

问题背景

  • 需求:将包含英文、特殊符号Ø、俄文的文本「Abc Ø абв」替换现有RTF模板中的占位符
  • 问题:使用utf8_decode_to_win1251函数将UTF-8转Win-1251编码时,俄文显示正常,但特殊符号Ø被错误转为Ш;无法通过单一Win-1251或Win-1252编码处理这类混合文本

解决方案

利用RTF原生的Unicode表示规则(格式为\uXXXX?,其中XXXX是字符的Unicode码点),编写转换函数将所有字符统一转为该格式,避免编码冲突问题。

示例转换效果:
Abc Ø абв → \u65?\u98?\u99?\u32?\u216?\u32?\u1072?\u1073?\u1074?

代码实现

原问题转码函数

// 原存在问题的转码函数
function utf8_decode_to_win1251(srcStr) {
  var tgtStr = "",
    c = 0;
  for (var i = 0; i < srcStr.length; i++) {
    c = srcStr.charCodeAt(i);
    if (c > 127) {
      if (c > 1024) {
        if (c === 1025) {
          c = 1016;
        } else if (c === 1105) {
          c = 1032;
        }
        c -= 848;
      }
    }
    tgtStr += String.fromCharCode(c);
  }
  return tgtStr;
}

最终解决函数

// 最终解决函数
function unicode_to_rtf_representation_u(srcStr) {
  if (srcStr == undefined) return "";

  let tgtStr = "";

  for (var i = 0; i < srcStr.length; i++) {
    let c = srcStr.charCodeAt(i);
    let result = "\\u" + c + "?";

    tgtStr += result; 
  }
  console.log("result strings is: " + tgtStr);
  return tgtStr;
}

完整Node.js示例代码

const http = require('http');
const port = 3100;

const server = http.createServer(function (req, res) {
  const fs = require('fs');
  fs.readFile("C:\\input.rtf", "utf8", (err, inputText) => {
    if (err) {
      console.error(err);
      return;
    }
    let text = `Abc Ø абв`;
    text = unicode_to_rtf_representation_u(text);
    inputText = inputText.replace("placeholder", text);
    let buf = Buffer.from(inputText, "ascii");
    fs.writeFile("C:\\output.rtf", buf, function (error, resultFile) {
      if (!error) {
        console.info('Created file', resultFile);
      }
      else {
        console.error(error);
      }
    });
  });
});

server.listen(port, function (error) {
  if (error) {
    console.log(`${error}`);
  } else {
    console.log(`listening on port ${port}`);
  }
})

内容的提问来源于stack exchange,提问作者Gennady G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:30