簡體   English   中英

在javascript中將整數數組轉換為字符串

[英]Convert integer array to string at javascript

這是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中處理數組呢?

JavaScript 字符串由UTF-16代碼單元組成,但數組中的數字是UTF-8字符串的字節。 這是轉換字符串的一種方法,它使用decodeURIComponent()函數:

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 轉換可能更有效,但需要更多代碼。

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]

另一個沒有decodeURIComponent解決方案,用於最多 3 個字節 (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
}

這些天似乎最好的方法如下:

function bufferToString(arr){
    return arr.map(function(i){return String.fromCharCode(i)}).join("")
}

中文字符集有一種不同的編碼,其中一個字符的長度超過一個字節。 當你這樣做時

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

您正在將每個字節轉換為字符(實際上是字符串)並將其添加到字符串 str 中。 您需要做的是,將字節打包在一起。

我把你的數組改成了這個,它對我有用:

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

我從這里得到這些代碼。

您還可以查看this將字節打包為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM