Frage

ich brauche große UTF-8-Strings in ASCII zu konvertieren. Es sollte reversibel sein und idealerweise ein kurzen / leichter Algorithmus.

Wie kann ich das tun? Ich brauche den source Code (mit Schleifen) oder dem JavaScript Code. (Soll nicht auf jeder Plattform / Rahmen / Bibliothek abhängig sein)

Edit: Ich verstehe, dass die ASCII-Darstellung nicht korrekt aussehen und würde größer sein (in Bytes) als das UTF-8-Gegenstück, da seine codierten Form des UTF-8 Originals .

War es hilfreich?

Lösung

Sie können eine ASCII-only-Version von Douglas Crockford json2.js Zitat-Funktion verwenden. Die wie folgt aussehen:

    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 + '"';
    }

Dies wird eine gültige erzeugen ASCII-only, javascript zitierte der Eingabezeichenfolge

z. quote("Doppelgänger!") wird "Doppelg \ u00e4nger!"

Um die Codierung zurückkehren können Sie nur das Ergebnis eval

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

Andere Tipps

All UTF-8-Zeichenfolge, die reversibel umwandelbar in ASCII ist bereits ASCII.

UTF-8 kann eine beliebige Unicode-Zeichen darstellen -. ASCII kann nicht

Wie andere gesagt haben, können Sie nicht UTF-8 text / plain in ASCII-text / plain konvertieren, ohne dass Daten zu fallen.

Sie können UTF-8 text / plain in ASCII someother / Format konvertieren. Zum Beispiel HTML jedes Zeichen in UTF-8 kann in einer ASCII-Datendatei repräsentiert mit Zeichenreferenzen .

Wenn wir mit diesem Beispiel fort, in JavaScript, charCodeAt könnte dazu beitragen, eine Zeichenfolge in eine Darstellung davon mit HTML-Zeichenreferenzen mit der Umwandlung.

Ein weiterer Ansatz wird genommen von URLs und in JS als encodeURIComponent .

Ihre Anforderung ist ziemlich seltsam.

Konvertieren von UTF-8 in ASCII würde alle Informationen über Unicode-Codepunkte verlieren> 127 (das heißt alles, was nicht in ASCII ist).

Sie können jedoch versuchen, Ihre Unicode-Daten zu kodieren (egal von welcher Quelle-Codierung) in einer ASCII-kompatible Codierung, wie UTF-7 . Dies würde bedeuten, dass die Daten, die legal erzeugt wird als ASCII interpretiert werden könnten, aber es ist wirklich UTF-7.

Wenn der String als UTF-8 kodiert ist, dann ist es kein String mehr. Es ist Binärdaten, und wenn Sie die Binärdaten als ASCII darstellen wollen, müssen Sie es in einen String zu formatieren, die mit dem begrenzten ASCII-Zeichensatz dargestellt werden können.

Eine Möglichkeit ist Base64-Kodierung (beispielsweise in C #) zu verwenden:

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);

Wenn Sie die Zeichenfolge wollen als ASCII-Daten codiert:

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

Haben Sie alle nicht ascii Zeichen entfernt werden sollen (slash ersetzt sie durch ‚?‘, Etc.) oder Unicode-Codepunkte zu speichern, in einem nicht Unicode-System?

Zuerst kann für Werte in einer Schleife überprüft> 128 und ersetzt sie durchgeführt werden.

Wenn Sie möchten, verwenden Sie nicht „jede Plattform / Rahmen / Bibliothek“, dann müssen Sie Ihren eigenen Encoder schreiben. Sonst würde ich nur jQuerys .html ();

Es ist unmöglich, konvertieren ein UTF-8-String in ASCII, aber es ist möglich, kodieren Unicode als ASCII-kompatiblen String.

Wahrscheinlich wollen Sie benutzen Punycode - dies ist bereits ein Standard-Unicode-Codierung, die alle kodiert Unicode-Zeichen in ASCII. Für JavaScript-Code Überprüfung dieser Frage

Bitte bearbeiten Sie hinterfragen Titel und eine Beschreibung, um andere daran zu hindern, nach unten stimmrechts es - nicht Begriff Konvertierung Verwendung Codierung verwenden.

Hier ist eine Funktion UTF8 Akzente auf ASCII Akzente (AEEI usw.) zu konvertieren Wenn es ein Akzent in der Zeichenfolge ist es zu% 239 für exemple umgewandelt Dann auf der anderen Seite, analysiere ich die Zeichenfolge, und ich weiß, wenn es ein Akzent ist und was ist die ASCII-Zeichen.

Ich habe es in einem JavaScript-Software-Daten an einen Mikrocontroller zu senden, die in ASCII funktioniert.

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;
}

Eine Implementierung der quote() Funktion könnte das tun, was Sie wollen. Meine Version können hier werden

Sie können mit eval() die Codierung rückgängig:

var foo = 'Hägar';
var quotedFoo = quote(foo);
var unquotedFoo = eval(quotedFoo);
alert(foo === unquotedFoo);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top