这是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处理数组呢?
答案 0 :(得分: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的转换可能更有效,但需要更多代码。
答案 1 :(得分: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 :(得分:3)
另一个没有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
}
答案 3 :(得分:1)
中文字符集具有不同的编码,其中一个字符长度超过一个字节。当你这样做时
for (i in arr){
str+=String.fromCharCode(arr[i]);
}
您正在将每个字节转换为char(实际为字符串)并将其添加到字符串str。 你需要做的是,将字节打包在一起。
我把你的数组改成了这个,它对我有用:
var arr=[20013,25991,99,104,105,110,101,115,101];
我从here获得了这些代码。
您还可以查看this将字节打包到字符串。
答案 4 :(得分:0)
似乎这些天的最佳方式如下:
return IntegrationFlows.from("eventsChannel")
.split()
.handle(Amqp.outboundAdapter(rabbitMqTemplate)
.exchangeName(exchangeName)
.confirmCorrelationExpression("payload")
.confirmAckChannel(ackChannel)
.confirmNackChannel(nackChannel)
)
.get();