用于JavaScript的Java的getBytes等效于不同的编码

时间:2017-07-07 10:08:29

标签: javascript arrays encoding decoding windows-1252

我有一个Java函数,我需要转换为JavaScript并包含这一行:

byte[] bytes = ttText.getBytes(Charset.forName("Cp1250"));

ttText是String。我需要做同样的事情。我需要获取在Cp1250(windows-1250)中编码的字符串的字节,修改这些字节然后将其转换回字符串。有没有办法在JavaScript中做到这一点?

我发现了例如TextEncoderTextDecoder,但不久之前对UTF-8的不同编码的支持被删除了。

2 个答案:

答案 0 :(得分:1)

var cp1250 = '€ ‚ „…†‡ ‰Š‹ŚŤŽŹ ‘’“”•–— ™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙';

function encodeCP1250(text) {
  var buf = [];
  for (var i = 0; i < text.length; i++) {
    var code = cp1250.indexOf(text[i]);
    if (code >= 0) {
      code += 128;
    } else {
      code = text.charCodeAt(i);
    }
    buf.push(code > 255 ? 32 : code);
  }
  return buf;  
}

function decodeCP1250(buf) {
  var text = '';
  for (var i = 0; i < buf.length; i++) {
    var code = buf[i];
    text += code > 127 ? cp1250[code - 128] : String.fromCharCode(code);
  }
  return text;  
}

var buf = encodeCP1250('AÁÂĂÄ'); // [65, 193, 194, 195, 196]
var text = decodeCP1250(buf);    // 'AÁÂĂÄ'

更新:Chrome和Firefox有TextDecoder作为实验性功能,但TextEncoder仅适用于UTF-8。

答案 1 :(得分:0)

试试这个。 https://mths.be/windows-1250

这看起来很有希望。它为编码和解码提供支持。 您需要做的就是添加库并使用方法。 var encodedData = windows1250.encode(text);