Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将大型UTF-8字符串转换为ASCII?_Javascript_Utf 8_Character Encoding_Ascii - Fatal编程技术网

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

Javascript 如何将大型UTF-8字符串转换为ASCII?,javascript,utf-8,character-encoding,ascii,Javascript,Utf 8,Character Encoding,Ascii,我需要将大的UTF-8字符串转换为ASCII。它应该是可逆的,理想情况下是一个快速/轻量级算法 我该怎么做?我需要源代码(使用循环)或JavaScript代码。(不应依赖于任何平台/框架/库) 编辑:我知道ASCII表示形式看起来不正确,并且会比UTF-8对应形式大(以字节计),因为它是UTF-8原始格式的编码形式。任何可可逆转换为ASCII的UTF-8字符串都已经是ASCII UTF-8可以表示任何unicode字符—ASCII不能。正如其他人所说,如果不删除数据,就无法将UTF-8文本/纯文

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

我该怎么做?我需要源代码(使用循环)或JavaScript代码。(不应依赖于任何平台/框架/库)


编辑:我知道ASCII表示形式看起来不正确,并且会比UTF-8对应形式大(以字节计),因为它是UTF-8原始格式的编码形式。

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


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

正如其他人所说,如果不删除数据,就无法将UTF-8文本/纯文本转换为ASCII文本/纯文本

您可以将UTF-8文本/纯文本转换为ASCII其他格式。例如,HTML允许UTF-8中的任何字符在ASCII数据文件中使用表示

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


另一种方法由JS as采用,并在JS as中实现。

如果字符串编码为UTF-8,它就不再是字符串了。它是二进制数据,如果您想将二进制数据表示为ASCII,则必须将其格式化为可以使用有限的ASCII字符集表示的字符串

一种方法是使用base-64编码(例如C#):

如果要将字符串编码为ASCII数据:

// encode the base-64 string into ASCII data:
byte[] encodedAscii = Encoding.ASCII.GetBytes(base64);

您可以使用Douglas Crockford的json2.js quote函数的ASCII版本。看起来是这样的:

    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 + '"';
    }
这将生成一个有效的ASCII,javascript引用输入字符串

e、 g.
quote(“Doppelgänger!”)
将是“Doppelg\u00e4nger!”

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

var encoded = quote("Doppelgänger!");
var back = JSON.parse(encoded); // eval(encoded);

quote()
函数的实现可能会满足您的需要。 我的版本

您可以使用
eval()
反向编码:

var foo = 'Hägar';
var quotedFoo = quote(foo);
var unquotedFoo = eval(quotedFoo);
alert(foo === unquotedFoo);

你的要求很奇怪

将UTF-8转换为ASCII将丢失有关Unicode代码点>127的所有信息(即非ASCII格式的所有信息)


但是,您可以尝试使用ASCII兼容编码对Unicode数据进行编码(无论源代码是什么),例如。这意味着生成的数据可以合法地解释为ASCII,但它实际上是UTF-7。

是否要删除所有非ASCII字符(斜杠替换为“?”等)或在非Unicode系统中存储Unicode代码点

首先可以在循环中检查大于128的值并替换它们


如果您不想使用“任何平台/框架/库”,那么您需要编写自己的编码器。否则我只使用JQuery的.html()

不可能将UTF-8字符串转换为ASCII,但可以Unicode编码为ASCII兼容字符串

可能您想使用-这已经是一种标准的Unicode编码,它将所有Unicode字符编码为ASCII。对于JavaScript代码,请检查以下内容


请编辑您的问题标题和说明,以防止其他人对其投反对票-不要使用术语转换,请使用编码

这里有一个将UTF8重音转换为ASCII重音的函数(èî等) 例如,如果字符串中有重音,它将转换为%239 另一方面,我解析字符串,我知道什么时候有重音,什么是ASCII字符

我在javascript软件中使用它将数据发送到以ASCII工作的微控制器

convertUtf8ToAscii = function (str) {
    var asciiStr = "";
    var refTable = { // Reference table Unicode vs ASCII
        199: 128, 252: 129, 233: 130, 226: 131, 228: 132, 224: 133, 231: 135, 234: 136, 235: 137, 232: 138,
        239: 139, 238: 140, 236: 141, 196: 142, 201: 144, 244: 147, 246: 148, 242: 149, 251: 150, 249: 151
    };
    for(var i = 0; i < str.length; i++){
        var ascii = refTable[str.charCodeAt(i)];
        if (ascii != undefined)
            asciiStr += "%" +ascii;
        else
            asciiStr += str[i];
    }
    return asciiStr;
}
convertUtf8ToAscii=函数(str){
var asciiStr=“”;
var refTable={//Reference table Unicode vs ASCII
199: 128, 252: 129, 233: 130, 226: 131, 228: 132, 224: 133, 231: 135, 234: 136, 235: 137, 232: 138,
239: 139, 238: 140, 236: 141, 196: 142, 201: 144, 244: 147, 246: 148, 242: 149, 251: 150, 249: 151
};
对于(变量i=0;i
我被你的编辑弄糊涂了。听起来你实际上要做的是url编码。是吗?我没有投你反对票。我不在乎UTF-8的二进制格式。如果我不知道我要的是什么,我甚至不会得到一些正确的答案。(如逃逸/BASE64),您应该考虑使用戴维的答案-<代码> EndoCuri()/代码> /Cudio> CuffDuri](<代码> > >比<代码> >(<代码> > />代码> Value>(代码)>杰瑞米,看看人们正在评论和更新您的问题,目前标题和描述非常错误。否则,您将继续获得其他人的反对票。为什么不使用eval()以外的其他工具?比如说html实体?主要是因为您不需要实现任何逆转,而且它将非常快。您也可以使用基于regex的unquote方法,非常类似于quote函数。。。或者,您可以使用正则表达式验证来保护基于eval的unquote,就像json2.js对完整JSON所做的那样。请注意,严格来说,这不是“转换为ASCII”。实际上,您正在ASCII之上实现自己的编码方案。这可能完全符合要求(对您来说也是如此),但这不仅仅是简单的“转换为ASCII”。您可以使用
JSON.parse(encoded)
(在封面下类似,但更安全)“ASCII不能”-当然可以!看看上面被接受的答案。@Jeremy:那就别那么偷偷摸摸地说出你的问题吧!“UTF-8到ASCII转换”听起来像是一个字符编码转换问题,而您真正想要的是一种使用ASCII字符集和已知字符集表示Unicode(与UTF-8不同)字符的方法
convertUtf8ToAscii = function (str) {
    var asciiStr = "";
    var refTable = { // Reference table Unicode vs ASCII
        199: 128, 252: 129, 233: 130, 226: 131, 228: 132, 224: 133, 231: 135, 234: 136, 235: 137, 232: 138,
        239: 139, 238: 140, 236: 141, 196: 142, 201: 144, 244: 147, 246: 148, 242: 149, 251: 150, 249: 151
    };
    for(var i = 0; i < str.length; i++){
        var ascii = refTable[str.charCodeAt(i)];
        if (ascii != undefined)
            asciiStr += "%" +ascii;
        else
            asciiStr += str[i];
    }
    return asciiStr;
}