gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:44 26 4
gpt4 key购买 nike

我需要将阿拉伯字符串编码为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com