8

これがphpコードです:

$arr=array(228,184,173,230,150,135,99,104,105,110,101,115,101);
$str='';
foreach ($arr as $i){
    $str.=chr($i);
}
print $str;

出力は次のとおりです。中文chinese

javascriptコードは次のとおりです。

var arr=[228,184,173,230,150,135,99,104,105,110,101,115,101];
var str='';
for (i in arr){
    str+=String.fromCharCode(arr[i]);
}
console.log(str);

出力は次のとおりです。中æchinese

では、javascriptで配列をどのように処理する必要がありますか?

4

5 に答える 5

20

JavaScript文字列はUTF-16コード単位で構成されていますが、配列内の数値はUTF-8文字列のバイトです。次に、 decodeURIComponent()関数を使用して文字列を変換する1つの方法を示します。

var i, str = '';

for (i = 0; i < arr.length; i++) {
    str += '%' + ('0' + arr[i].toString(16)).slice(-2);
}
str = decodeURIComponent(str);

UTF-8からUTF-16への変換を従来の方法で実行すると、より効率的になる可能性がありますが、より多くのコードが必要になります。

于 2012-12-25T06:24:44.367 に答える
6
var arry = [3,5,7,9];
console.log(arry.map(String))

結果は['3','5','7','9']

var arry = ['3','5','7','9']
console.log(arry.map(Number))

結果は[3,5,7,9]

于 2015-01-04T10:11:31.940 に答える
3

decodeURIComponent3 バイトまでの文字 (U+FFFF) を使用しない別のソリューション。この関数は、文字列が有効な UTF-8 であると想定しており、エラー チェックはあまり行われていません...

function atos(arr) {
    for (var i=0, l=arr.length, s='', c; c = arr[i++];)
        s += String.fromCharCode(
            c > 0xdf && c < 0xf0 && i < l-1
                ? (c & 0xf) << 12 | (arr[i++] & 0x3f) << 6 | arr[i++] & 0x3f
            : c > 0x7f && i < l
                ? (c & 0x1f) << 6 | arr[i++] & 0x3f
            : c
        );

    return s
}
于 2013-05-17T12:07:17.663 に答える
2

最近の最良の方法は次のようです。

function bufferToString(arr){
    return arr.map(function(i){return String.fromCharCode(i)}).join("")
}
于 2017-07-26T22:22:01.020 に答える
1

中国語の文字セットには、1 つの文字の長さが 1 バイトを超える別のエンコーディングがあります。これを行うと

for (i in arr){
    str+=String.fromCharCode(arr[i]);
}

各バイトを char (実際には文字列) に変換し、それを文字列 str に追加しています。あなたがする必要があるのは、バイトをまとめることです。

あなたの配列をこれに変更しましたが、うまくいきました:

var arr=[20013,25991,99,104,105,110,101,115,101];

これらのコードはhereから取得しました。

バイトを文字列にパックするためにこれを見ることもできます。

于 2012-12-25T06:33:52.867 に答える