如何将大型UTF-8字符串转换为ASCII?

Rob*_*cks 3 javascript ascii utf-8 character-encoding

我需要将大型UTF-8字符串转换为ASCII.它应该是可逆的,理想情况下是快速/轻量级算法.

我怎样才能做到这一点?我需要代码(使用循环)或JavaScript代码.(不应该依赖于任何平台/框架/库)

编辑:据我所知,ASCII表示看起来不正确,并且比UTF-8对应物更大(以字节为单位),因为它是UTF-8原始的编码形式.

Nea*_*all 10

任何可逆转换为ASCII的UTF-8字符串都是ASCII.

UTF-8可以表示任何unicode字符 - ASCII不能.

  • @Jeremy:然后偷偷​​地说出你的问题!"UTF-8到ASCII转换"听起来像是一个字符编码转换问题,而你真正想要的是一种使用ASCII字符集和已知字符转义语法来表示*Unicode*(与UTF-8不同)字符的方法. (6认同)
  • “ASCII 不能”——当然可以!看看上面接受的答案。 (2认同)

ffo*_*orw 10

您可以使用仅限ASCII版本的Douglas Crockford的json2.js引用函数.看起来像这样:

    var escapable = /[\\\"\x00-\x1f\x7f-\uffff]/g,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        };

    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }
Run Code Online (Sandbox Code Playgroud)

这将生成一个有效的ASCII-only,javascript引用的输入字符串

例如quote("Doppelgänger!")将是"Doppelg\u00e4nger!"

要恢复编码,您只需评估结果即可

var encoded = quote("Doppelgänger!");
var back = JSON.parse(encoded); // eval(encoded);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,严格来说这不是"转换为ASCII".您实际上是在ASCII之上实现自己的编码方案.这可能完全可以满足要求(并且它似乎适合您),但它不仅仅是一个简单的"转换为ASCII". (4认同)

Que*_*tin 5

正如其他人所说,你不能在不丢弃数据的情况下将UTF-8 text/plain转换为ASCII text/plain.

您可以将UTF-8 text/plain转换为ASCII格式/格式.例如,HTML允许UTF-8中的任何字符使用字符引用表示在ASCII数据文件中.

如果我们继续这个例子,在JavaScript中,charCodeAt可以帮助将字符串转换为使用HTML字符引用的表示形式.

另一种方法是URL,并在JS中作为encodeURIComponent实现.