【问题标题】:Convert html-input to proper encoding将 html-input 转换为正确的编码
【发布时间】:2015-05-12 23:58:12
【问题描述】:

我有一个带有一个 html 输入字段的 html 表单。输入通过剪贴板从其他程序复制。有时复制的文本不是utf-8,而是ansi(用notepad++测试)。然后,像ü 这样的变音符号被复制为ü。 由于我不想每次都更改剪贴板文本的编码(使用 i.e.notepad++),因此我想在解析和拆分输入文本时直接使用 javascript 进行此操作。

有没有办法在不为此实现自己的函数的情况下做到这一点(这将是我接下来要为最常见的变音符号做的事情)?

【问题讨论】:

  • 好的。与往常一样,搜索、测试和查找,而不仅仅是询问,然后就会出现这样的答案:stackoverflow.com/questions/18222665/… 也许这对我来说是最好的。
  • 我在寻找一个 utf-8 通用转换器,发现了这个:jsfromhell.com/geral/utf-8。但是,ü 没有被转换为 ü...如果您愿意,无论如何,您都可以收听“粘贴”事件并将输入值更改为编码的值。我在尝试时制作了这个代码笔: codepen.io/anon/pen/GgYZeb 。每次您粘贴一些内容时,它都会自动将其转换为 UTF8... 但它似乎不适用于您的具体情况。
  • 天哪,那是因为它是utf8.decode,我是个白痴。请查看:codepen.io/anon/pen/GgYZeb

标签: javascript character-encoding forms diacritics


【解决方案1】:

从网上窃取这个:

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/geral/utf-8 [rev. #1]

var UTF8 = {
    encode: function(s){
        for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
            s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
        );
        return s.join("");
    },
    decode: function(s){
        for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
            ((a = s[i][c](0)) & 0x80) &&
            (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
            o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
        );
        return s.join("");
    }
};

然后您可以添加您的输入:

<input type="text" id="test">

然后监听 PASTE 事件,几毫秒后(否则你会得到 "" as .val),你可以用解码的值替换输入的整个值:

$('#test').on('paste', function(e) {
  var controller = $(this);
  setTimeout(function(){
    controller.val(UTF8.decode(controller.val()));
  },10);
});

代码笔:

http://codepen.io/anon/pen/GgYZeb

请注意,它只监听 PASTE 事件。如果您有兴趣,还可以添加其他活动。

【讨论】:

  • 谢谢。我会试试这个 - 我想,我不必理解该代码的每一个边缘;-)
  • @Sammy:我注意到它有很多错误,因为如果你拿一段文本然后解析另一段,它会由于某些原因删除一些字符。我真的不知道该函数(UTF8 对象)是如何制作的,因此我不能再进一步了,但是只要您粘贴整个 ENCODED Ansi 字符串,它就会正确解码。
  • @Sammy:你可能还想进一步看看这个:stackoverflow.com/questions/6607799/…
  • 我的方法是使用我发布的链接。将我的 js 文件保存为 utf-8 后,它运行良好......我稍后会尝试这个解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 2019-12-07
  • 2012-10-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多