2017-10-25 49 views
1

私は奇妙な状況に遭遇し、私の方法を理解できないようです。 UTF8文字を含む文字列があります(エスケープされています)。私はdecodeURIComponent(エスケープ(str))と他のいくつかの修正案を試しましたが、まだ成功しませんでした。JavascriptからVTFをUTF8の文字列に変換する

私は文字列を取り、エスケープされた文字を見つけて、まっすぐなUTF8に置き換えるためにこの関数を書いています。テストから

var unescapeUTF8 = function(str) { 
    var matches = str.match(/\\u.{4}/g); 
    if (matches == null) return str; 
    for (var item of matches) 
    { 
     // testing 
     console.log(new String(item)); 
    } 
    .... 
    .... 
    .... 
}; 

、私は文字列オブジェクトString {0: "ģ", length: 1, [[PrimitiveValue]]: "ģ"}

を取り戻すだろうnew String("\u0123")を行けば関係なく、私は上記の関数で文字列に何をすべきか、私はそれを得ることはできませんようだということを知っていますそれからの変換がģ私は開発ツールを開いて実行することによって、私のブラウザで問題「を作成」に管理している

\u0123を逃れています

var x = "\\u0123"; 
console.log(x); // == "\u0123" 
new String(x); // == String {0: "\", 1: "u", 2: "1", 3: "3", 4: "2", 5: "4", length: 6, [[PrimitiveValue]]: "\u1324"} 
を次

誰もがUTF8の文字に「x」をしてください変換する方法を見つけ出すことができます...

+0

と ''新しい文字列 ''は動作しません、それはその上に保持しているようです何とかどこかに接頭辞をつける。 – TolMera

+0

[エスケープされたユニコードで文字列をデコードするにはどうすればいいですか?](https://stackoverflow.com/questions/7885096/how-do-i-decode-a-string-with-escaped-unicode)? –

+1

'new String(" \ u")'が 'true 'なので、文字列が既に' new String( "\ u0123")== "\ u0123")であるため、新しい文字列 –

答えて

3

これらのエスケープシーケンスは、一見、有効なJSONエスケープシーケンスなので、最も簡単な方法のように文字列を解析することですJSON文字列:(。(新しいString( "\\ u0123"))のtoString())

var x = "\\u0123"; 
 
console.log(JSON.parse('"' + x + '"'));

+1

Brilliant!ありがとうございました。 – TolMera

+0

強調:この回答はUTF-8とは関係がありません。なぜなら質問はUTF-8とは関係がないように思われるからです(質問のコメントに見られるように)。 "\ uABCD"としてフォーマットされたエスケープは、JavaScriptとJSONが文字列で使用するUTF-16コード単位のものです。 –

関連する問題