【问题标题】:Equivalent of Java's getBytes in JavaScript for different encodings等效于不同编码的 JavaScript 中 Java 的 getBytes
【发布时间】:2017-12-11 14:20:09
【问题描述】:

我有一个需要转换为 JavaScript 的 Java 函数,其中包含以下行:

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

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

我发现了例如TextEncoderTextDecoder,但对与UTF-8 不同的编码的支持在不久前就被放弃了。

【问题讨论】:

    标签: javascript arrays encoding decoding windows-1252


    【解决方案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。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,我也找到了这个,但它仅用于编码/解码。我需要获取实际字节来修改它们。编码为字节 -> 修改字节 -> 解码。
      • 我有一个问题。如果修改编码字节,解码后将不会得到相同的结果。
      • 是的,我当然知道。这就是为什么我需要修改它们。我需要对这些字节应用某种映射函数以获得不同的结果。
      • 我正在使用一个返回某个字符的外部 API。我需要使用特殊的图像/图标字体在网上打印出这个字符。我从 API 获得的每个字符都有图像字体中的图像表示,但是,只有某些字符匹配它们的字体对应物而无需修改。为了匹配其他人,我必须为每个字节执行类似 (bytes[i] & 0xFF) + 0xF000) 的操作。嗯......所以没有办法在 JavaScript 中做到这一点? :-/
      • 你把我弄丢了。肯定会有人帮你的,一定有办法的。我正在为你的问题加分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2015-11-22
      • 1970-01-01
      相关资源
      最近更新 更多