2012-12-25 59 views
8

这里是PHP代码:转换整数数组串在JavaScript的

$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的数组?

+1

当我运行PHP代码的时候,我得到了输出'ä¸æ-‡chinese''。PHP配置有什么特别之处吗? – Stegrex

+0

我得到了与@Stegrex相同的确切输出 – PhearOfRayne

+0

@Stegrex也许这是区域设置的问题。你可以尝试在'/ etc/locale.gen'处取消注释'zh_CN.XXX' –

回答

18

的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转换以常规的方式很可能是更有效的,但需要更多的代码。

+3

+1 - 终于明白实际问题的人。 – jfriend00

+1

@PleaseStand,“传统方式转换”是什么意思?你指的是什么“传统方式”? – Pacerier

+2

使用你的方法我得到了一个'URIError:URI格式不正确' – Romain

-4

基本上Javascript全部视为字符串。我们可以将字符串更改为整数使用parseInt

我们不需要将整数更改为字符串。尝试在Javascript以下代码:

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

你真的尝试过吗?你会得到“228184173 ...”,而不是OP想要什么。 – jfriend00

1

中文字符集有不同的编码,其中一个字符长度超过一个字节。当你这样做时

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

你正在将每个字节转换为字符(实际上是字符串)并将其添加到字符串str。 你需要做的是将字节打包在一起。

我改变了你的阵列这个和它的工作对我来说:

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

我得到了这些代码从here

您还可以看看this将字节打包为字符串。

3

对于最多3个字节(U + FFFF)的字符,没有decodeURIComponent的另一个解决方案。 功能假定该字符串是有效的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 
} 
+0

我用中文,俄文,希伯来文和英文测试了这个,它工作。代码不太可读,但它是正确的方法。 –

5
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]

+2

你在回答错误的问题吗? – Pacerier

-1

似乎这些日子的最佳方式如下:

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