문제

큰 UTF-8 현을 ASCII로 변환해야합니다. 가역적이어야하며 이상적으로는 빠른/가벼운 알고리즘이어야합니다.

어떻게 할 수 있습니까? 나는 필요하다 원천 코드 (루프 사용) 또는 자바 스크립트 암호. (플랫폼/프레임 워크/라이브러리에 의존해서는 안됩니다)

편집하다: 나는 ASCII 표현이 UTF-8 원본의 인코딩 형태이기 때문에 UTF-8 대응 물보다 올바르게 보이고 (바이트 측면에서) 더 크다는 것을 이해한다.

도움이 되었습니까?

해결책

Douglas Crockford의 JSON2.JS 견적 기능의 Ascii-only 버전을 사용할 수 있습니다. 다음과 같이 보일 것입니다.

    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-anly, javaScript-quot을 생성합니다.

예를 들어 quote("Doppelgänger!") "doppelg u00e4nger!"

인코딩을 되돌리려면 결과를 평가할 수 있습니다.

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

다른 팁

ASCII로 가역적으로 변환되는 UTF-8 문자열은 이미 ASCII입니다.

UTF -8은 모든 유니 코드 문자를 나타낼 수 있습니다 -ASCII는 할 수 없습니다.

다른 사람들이 말했듯이, 데이터를 삭제하지 않고 UTF-8 텍스트/일반을 ASCII 텍스트/일반으로 변환 할 수는 없습니다.

UTF-8 텍스트/일반을 ASCII로 변환 할 수 있습니다. 예를 들어, HTML은 UTF-8의 모든 문자가 ASCII 데이터 파일을 사용하여 표현할 수 있도록합니다. 캐릭터 참조.

그 예를 계속하면 JavaScript에서 charcodeat HTML 문자 참조를 사용하여 문자열을 IT 표현으로 변환하는 데 도움이 될 수 있습니다.

또 다른 접근법은 URL, JS AS에서 구현되었습니다 encodeUricomponent.

귀하의 요구 사항은 매우 이상합니다.

UTF-8을 ASCII로 변환하면 유니 코드 코드 포인트> 127 (즉, ASCII가 아닌 모든 내용)에 대한 모든 정보가 느슨해집니다.

그러나 ASCII 호환 인코딩에서 유니 코드 데이터 (어떤 소스 인코딩에 관계없이)를 인코딩하려고 할 수 있습니다. UTF-7. 이는 생성 된 데이터가 법적으로 ASCII로 해석 될 수 있지만 실제로 UTF-7입니다.

문자열이 UTF-8으로 인코딩되면 더 이상 문자열이 아닙니다. 이진 데이터이며 이진 데이터를 ASCII로 표현하려면 제한된 ASCII 문자 세트를 사용하여 표현할 수있는 문자열로 포맷해야합니다.

한 가지 방법은 Base-64 인코딩 (C#의 예)를 사용하는 것입니다.

string original = "asdf";
// encode the string into UTF-8 data:
byte[] encodedUtf8 = Encoding.UTF8.GetBytes(original);
// format the data into base-64:
string base64 = Convert.ToBase64String(encodedUtf8);

문자열을 ASCII 데이터로 인코딩하려면 :

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

모든 비 ASCII char (슬래시를 '?'등으로 교체하거나 비 유니 코드 시스템에 유니 코드 코드 포인트를 저장 하시겠습니까?

먼저 값> 128을 검사하고 교체 할 수 있습니다.

"모든 플랫폼/프레임 워크/라이브러리"를 사용하지 않으려면 자신의 인코더를 작성해야합니다. 그렇지 않으면 나는 단지 jQuery의 .html ()을 사용합니다.

불가능합니다 전환하다 UTF-8 문자열은 ASCII에 대한 문자열이지만 가능합니다. 인코딩 ASCII 호환 문자열로서의 유니 코드.

아마 당신은 사용하고 싶을 것입니다 퓨니 코드 - 이것은 이미 모든 유니 코드 문자를 ASCII로 인코딩하는 표준 유니 코드 인코딩입니다. JavaScript 코드는 이것을 확인하십시오 의문

다른 사람들이 다운 투표를하지 않도록 질문 제목 및 설명을 편집하십시오. 용어 변환을 사용하지 말고 인코딩을 사용하지 마십시오.

다음은 UTF8 액센트를 ASCII 액센트 (àéèî 등)로 변환하는 기능이 있습니다. 문자열에 악센트가 있으면 반대편에 예보를 위해 %239로 변환됩니다. 나는 문자열을 구문 분석하고 Accent가있을 때를 알고 있습니다. 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;
}

의 구현 quote() 기능은 원하는대로 할 수 있습니다. 내 버전 여기에서 찾을 수 있습니다

당신이 사용할 수있는 eval() 인코딩을 뒤집기 위해 :

var foo = 'Hägar';
var quotedFoo = quote(foo);
var unquotedFoo = eval(quotedFoo);
alert(foo === unquotedFoo);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top