javascript - 如何使用javascript将字符串编码到Windows 1256中

标签 javascript node.js character-encoding urlencode iconv

我需要将阿拉伯字符串编码为 Windows 1256 格式

所以我找到了一种将字符串从 Windows 1256 解码为原始字符串的方法,我想要此代码的反向/相反

function decode(string) {
  var array = [...string.matchAll(/%(.{2})/g)].map((groups) => parseInt(groups[1], 16));
  var decoder = new TextDecoder('windows-1256');
  return decoder.decode(Uint8Array.from(array).buffer);
}
console.log(decode('%E3%CD%E3%CF'));
console.log('%C7%E1%DA%E1%E6%E3+%2D%CA%DA%E1%ED%E3+%C7%D3%C7%D3%EC'.split('+').map(decode));

最佳答案

iconv npm 上的包声称可以做到这一点。像这样的东西可能会起作用。

const Iconv = require('iconv').Iconv;

const utfToArabic = new Iconv('UTF-8', 'CP1256');
const arabic = utfToArabic.convert(string);

根据输入字符串的内容,您可以更好地指定 'CP1256//TRANSLIT//IGNORE' 而不是仅指定 'CP1256'。这告诉 iconv 尝试音译,然后忽略输入 UTF-8 字符串中未映射到代码页的字符。

在 Javascript 中,所有字符串值无一异常(exception)都以 utf-8 编码。其他编码作为缓冲区处理。如果不是 utf-8,则它不是字符串

以下是 silly Arabic phrase 的往返转换示例使用 iconv 到代码页 1256 并返回。

const Iconv = require('iconv').Iconv;
const eatGlass = 'أنا قادر على أكل الزجاج و هذا لا يؤلمني'
console.log (eatGlass, eatGlass.length)
const utfToArabic = new Iconv('UTF-8', 'CP1256')
const arabicToUtf = new Iconv('CP1256', 'UTF-8')
try {
  const arabic = utfToArabic.convert(eatGlass)
  console.log(arabic, arabic.length)
  const s = arabicToUtf.convert(arabic).toString()
  console.log (s, s.length)
}
catch (err) {
  console.log(err)
}

此代码片段产生此输出。

أنا قادر على أكل الزجاج و هذا لا يؤلمني 39
<Buffer c3 e4 c7 20 de c7 cf d1 20 da e1 ec 20 c3 df e1 20 c7 e1 d2 cc c7 cc 20 e6 20 e5 d0 c7 20 e1 c7 20 ed c4 e1 e3 e4 ed> 39
أنا قادر على أكل الزجاج و هذا لا يؤلمني 39

您的 %C3%E4%C7+%DE%C7%CF%D1+%DA 表示形式具有大写的十六进制数字和前导 %,当然,这是特定于您的应用程序的 URL 编码风格。您可以使用这样的函数将从 Iconv.convert() 获得的缓冲区转换为类似的字符串。

function toHexStringWithMarker (buf, marker = '%' ) {
  const a = []
  buf.forEach(c => a.push(c === 0x20 ? '+' : marker + c.toString(16).toUpperCase()))
  return a.join('')
}

关于javascript - 如何使用javascript将字符串编码到Windows 1256中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60452097/

相关文章:

javascript - 当我尝试在 Windows 中通过 cmd 执行代码时,我不断收到 "Path must be a string of buffer"错误

java - 如何知道文件中有哪些特殊字符?

mysql 与俄罗斯的比赛

javascript - 蹦床功能操作原理

javascript - 在 highstock 中设置导航数据

javascript - 无法创建 Handlebars 模板

java - 谁在 Spring MVC (@ResponseBody) 中设置响应内容类型

javascript - cordova/phonegap 应用程序 - 从服务器加载 js css 和 html

node.js - 在 Parse Cloud Code 更新 Stripe 模块

javascript - 如何将 CURL -F @filename 转换为nodejs