jquery to - Javascript:Unicode-String zu Hex




escape charcode (5)

Hier ist ein Tweak von McDowells Algorithmus, der das Ergebnis nicht auffüllt:

  function toHex(str) {
    var result = '';
    for (var i=0; i<str.length; i++) {
      result += str.charCodeAt(i).toString(16);
    }
    return result;
  }

Ich versuche, eine Unicode-Zeichenfolge in eine hexadezimale Darstellung in JavaScript zu konvertieren.

Das habe ich:

function convertFromHex(hex) {
    var hex = hex.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}

function convertToHex(str) {
    var hex = '';
    for(var i=0;i<str.length;i++) {
        hex += ''+str.charCodeAt(i).toString(16);
    }
    return hex;
}

Aber wenn Unicode-Zeichen fehlschlagen, wie Chinesisch;

Eingabe: 漢字

Ausgabe: ªo "[W

Irgendwelche Ideen? Kann dies in Javascript getan werden?


Es hängt davon ab, welche Kodierung Sie verwenden. Wenn du utf-8 codiertes Hex in String umwandeln möchtest, verwende folgendes:

function fromHex(hex,str){
  try{
    str = decodeURIComponent(hex.replace(/(..)/g,'%$1'))
  }
  catch(e){
    str = hex
    console.log('invalid hex input: ' + hex)
  }
  return str
}

Für die andere Richtung benutze dies:

function toHex(str,hex){
  try{
    hex = unescape(encodeURIComponent(str))
    .split('').map(function(v){
      return v.charCodeAt(0).toString(16)
    }).join('')
  }
  catch(e){
    hex = str
    console.log('invalid text input: ' + str)
  }
  return hex
}

Wie bekommst du "\u6f22\u5b57" von 漢字 in JavaScript?

Dies sind JavaScript-Unicode-Escape-Sequenzen, zB \u12AB . Um sie zu konvertieren, können Sie über jede Code-Einheit in der Zeichenfolge iterieren, rufen Sie .toString(16) darauf, und gehen Sie von dort aus.

Es ist jedoch effizienter, auch hexadezimale Escape-Sequenzen z. B. \xAA in der Ausgabe zu verwenden, wo immer dies möglich ist.

Beachten Sie außerdem, dass ASCII-Symbole wie A , b und - wahrscheinlich nicht maskiert werden müssen.

Ich habe eine kleine JavaScript-Bibliothek geschrieben, die all das für Sie jsesc , jsesc . Es hat viele Optionen, um die Ausgabe zu steuern.

Hier ist eine Online-Demo des Tools in Aktion: http://mothereff.in/js-escapes#1%E6%BC%A2%E5%AD%97

http://mothereff.in/js-escapes#1%E6%BC%A2%E5%AD%97

Ihre Frage wurde als utf-8 markiert. Wenn Sie den Rest Ihrer Frage utf8.js scheint die UTF-8-Kodierung / Dekodierung nicht das zu sein, was Sie hier wollten, aber falls Sie sie jemals brauchen sollten: Verwenden Sie utf8.js ( Online-Demo ).


Denken Sie daran, dass eine JavaScript-Code-Einheit 16 Bit breit ist. Daher wird die hexadezimale Zeichenfolge 4 Ziffern pro Codeeinheit sein.

Verwendung:

var str = "\u6f22\u5b57"; // "\u6f22\u5b57" === "漢字"
alert(str.hexEncode().hexDecode());

Zeichenfolge in Hex-Form:

String.prototype.hexEncode = function(){
    var hex, i;

    var result = "";
    for (i=0; i<this.length; i++) {
        hex = this.charCodeAt(i).toString(16);
        result += ("000"+hex).slice(-4);
    }

    return result
}

Wieder zurück:

String.prototype.hexDecode = function(){
    var j;
    var hexes = this.match(/.{1,4}/g) || [];
    var back = "";
    for(j = 0; j<hexes.length; j++) {
        back += String.fromCharCode(parseInt(hexes[j], 16));
    }

    return back;
}

Ich möchte eine etwas fundiertere Antwort geben, die die anderen Antworten ergänzt. Ich hatte gehofft, die populärste Antwort zu bearbeiten, schlug aber fehl. Ich habe versucht, es so umfassend und vollständig wie möglich zu gestalten.

Weitere Informationen finden Sie in der MDN-Dokumentation .

"use strict" eine in ECMAScript 5 eingeführte Direktive.

Richtlinien ähneln Aussagen, unterscheiden sich jedoch.

  • use strict enthält keine Schlüsselwörter: Die Direktive ist eine einfache Ausdrucksanweisung, die aus einem speziellen String-Literal (in einfachen oder doppelten Anführungszeichen) besteht. JavaScript-Engines, die ECMAScript 5 nicht implementieren, sehen lediglich eine Ausdrucksanweisung ohne Nebeneffekte. Es wird erwartet, dass zukünftige Versionen der ECMAScript-Standards die use als echtes Schlüsselwort einführen. die Zitate würden damit überflüssig werden.
  • use strict kann nur am Anfang eines Skripts oder einer Funktion verwendet werden, dh es muss vor jeder anderen (echten) Anweisung stehen. Es muss nicht die erste Anweisung in einem Funktionsskript sein: Es können andere Anweisungsausdrücke vorangestellt werden, die aus String-Literalen bestehen (und JavaScript-Implementierungen können sie als implementierungsspezifische Anweisungen behandeln). String-Literals-Anweisungen, die auf eine erste echte Anweisung (in einem Skript oder einer Funktion) folgen, sind einfache Ausdrucks-Anweisungen. Dolmetscher dürfen sie nicht als Richtlinien interpretieren und haben keine Wirkung.

Die Anweisung use strict zeigt an, dass der folgende Code (in einem Skript oder einer Funktion) strikter Code ist. Der Code auf der höchsten Ebene eines Skripts (Code, der nicht in einer Funktion enthalten ist) wird als strikter Code betrachtet, wenn das Skript eine Anweisung für die use strict Anweisungen enthält. Der Inhalt einer Funktion wird als strikter Code betrachtet, wenn die Funktion selbst in einem strengen Code definiert ist oder wenn die Funktion eine Anweisung für eine use strict enthält. Code, der an eine eval() -Methode übergeben wird, gilt als strikter Code, wenn eval() von einem strengen Code aus aufgerufen wurde oder die Anweisung use strict selbst enthält.

Der strikte Modus von ECMAScript 5 ist eine eingeschränkte Teilmenge der JavaScript-Sprache, die relevante Sprachdefizite beseitigt und eine strengere Fehlerprüfung und höhere Sicherheit bietet. Im Folgenden sind die Unterschiede zwischen dem strikten Modus und dem normalen Modus aufgeführt (von denen die ersten drei besonders wichtig sind):

  • Sie können die with -statement nicht im strikten Modus verwenden.
  • Im strikten Modus müssen alle Variablen deklariert werden: Wenn Sie einem Bezeichner einen Wert zuweisen, der nicht als Variable, Funktion, Funktionsparameter, Catch-Klausel-Parameter oder Eigenschaft des globalen Object deklariert ist, erhalten Sie einen ReferenceError . Im Normalmodus wird der Bezeichner implizit als globale Variable (als Eigenschaft des globalen Object ) deklariert.
  • Im strikten Modus hat das Schlüsselwort den Wert in Funktionen, die als Funktionen (nicht als Methoden) aufgerufen wurden, undefined . (Im Normalmodus zeigt this immer auf das globale Object ). Dieser Unterschied kann verwendet werden, um zu testen, ob eine Implementierung den strikten Modus unterstützt:
var hasStrictMode = (function() { "use strict"; return this===undefined }());
  • Wenn eine Funktion mit call() oder apply im strikten Modus aufgerufen wird, ist this genau der Wert des ersten Arguments des call() von call() oder apply() . (Im normalen Modus werden null und undefined durch das globale Object und Werte, die keine Objekte sind, werden in Objekte umgewandelt.)

  • Im strikten Modus erhalten Sie einen TypeError , wenn Sie versuchen, Readonly-Eigenschaften zuzuweisen oder neue Eigenschaften für ein nicht erweiterbares Objekt zu definieren. (Im Normalmodus schlagen beide einfach ohne Fehlermeldung fehl.)

  • Im strikten Modus können Sie beim Übergeben von Code an eval() keine Variablen oder Funktionen im Gültigkeitsbereich des Aufrufers deklarieren oder definieren (wie im normalen Modus möglich). Stattdessen wird ein neuer Gültigkeitsbereich für eval() und die Variablen und Funktionen befinden sich in diesem Gültigkeitsbereich. Dieser Bereich wird zerstört, nachdem eval() Ausführung abgeschlossen hat.
  • Im strikten Modus enthält das Argumentobjekt einer Funktion eine statische Kopie der Werte, die an diese Funktion übergeben werden. Im normalen Modus verhält sich das arguments-object etwas "magisch": Die Elemente des Arrays und die benannten Funktionsparameter verweisen auf denselben Wert.
  • Im strikten Modus erhalten Sie einen SyntaxError wenn auf den delete ein nicht qualifizierter Bezeichner (ein Variablen-, Funktions- oder Funktionsparameter) folgt. Im normalen Modus würde der delete nichts bewirken und wird als false ausgewertet.
  • Im strikten Modus erhalten Sie einen TypeError wenn Sie versuchen, eine nicht konfigurierbare Eigenschaft zu löschen. (Im normalen Modus schlägt der Versuch einfach fehl und der delete wird als false ausgewertet.)
  • Im strikten Modus wird dies als syntaktischer Fehler betrachtet, wenn Sie versuchen, mehrere Eigenschaften mit demselben Namen für ein Objektliteral zu definieren. (Im normalen Modus gibt es keinen Fehler.)
  • Im strikten Modus wird es als syntaktischer Fehler betrachtet, wenn eine Funktionsdeklaration mehrere Parameter mit demselben Namen hat. (Im normalen Modus gibt es keinen Fehler.)
  • Im strikten Modus sind Oktal-Literale nicht zulässig (dies sind Literale, die mit 0x . (Im normalen Modus lassen manche Implementierungen Oktal-Literale zu.)
  • Im strikten Modus werden die Bezeichner eval und die arguments wie Schlüsselwörter behandelt. Sie können ihren Wert nicht ändern, ihnen keinen Wert zuweisen und sie nicht als Namen für Variablen, Funktionen, Funktionsparameter oder Bezeichner eines catch-Blocks verwenden.
  • Im strikten Modus gibt es weitere Einschränkungen für die Möglichkeiten, den Aufrufstack zu untersuchen. arguments.caller und arguments.callee verursachen einen TypeError in einer Funktion im strikten Modus. Darüber hinaus verursachen einige Aufrufer- und Argumenteigenschaften von Funktionen im strikten Modus einen TypeError wenn Sie versuchen, sie zu lesen.




javascript jquery unicode utf-8 hex