Tom*_*ese 57 javascript string utf-8 arraybuffer
我有一个ArrayBuffer包含使用UTF-8编码的字符串,我找不到将其转换ArrayBuffer为JS 的标准方法String(我理解使用UTF-16编码).
我已经在很多地方看到过这段代码,但我看不出它如何适用于长度超过1个字节的任何UTF-8代码点.
return String.fromCharCode.apply(null, new Uint8Array(data));
Run Code Online (Sandbox Code Playgroud)
同样,我找不到从a String转换为UTF-8编码的标准方法ArrayBuffer.
PPB*_*PPB 47
var uint8array = new TextEncoder("utf-8").encode("Plain Text");
var string = new TextDecoder().decode(uint8array);
console.log(uint8array ,string )
Run Code Online (Sandbox Code Playgroud)
Nic*_*ngo 39
function stringToUint(string) {
var string = btoa(unescape(encodeURIComponent(string))),
charList = string.split(''),
uintArray = [];
for (var i = 0; i < charList.length; i++) {
uintArray.push(charList[i].charCodeAt(0));
}
return new Uint8Array(uintArray);
}
function uintToString(uintArray) {
var encodedString = String.fromCharCode.apply(null, uintArray),
decodedString = decodeURIComponent(escape(atob(encodedString)));
return decodedString;
}
Run Code Online (Sandbox Code Playgroud)
在互联网的帮助下,我已经完成了这些小功能,他们应该解决你的问题!这是工作的JSFiddle.
编辑:
由于Uint8Array的源是外部的,你不能使用atob你只需要删除它(工作小提琴):
function uintToString(uintArray) {
var encodedString = String.fromCharCode.apply(null, uintArray),
decodedString = decodeURIComponent(escape(encodedString));
return decodedString;
}
Run Code Online (Sandbox Code Playgroud)
Alb*_*ert 23
这应该工作:
// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt
/* utf.js - UTF-8 <=> UTF-16 convertion
*
* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
* Version: 1.0
* LastModified: Dec 25 1999
* This library is free. You can redistribute it and/or modify it.
*/
function Utf8ArrayToStr(array) {
var out, i, len, c;
var char2, char3;
out = "";
len = array.length;
i = 0;
while (i < len) {
c = array[i++];
switch (c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
out += String.fromCharCode(c);
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
char2 = array[i++];
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
char2 = array[i++];
char3 = array[i++];
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
}
}
return out;
}
Run Code Online (Sandbox Code Playgroud)
它与其他解决方案相比更加清晰,因为它不使用任何hacks,也不依赖于Browser JS功能,例如也适用于其他JS环境.
查看JSFiddle演示.
小智 17
在Github上有一个用于编码的 polyfill:文本编码.Node或浏览器很容易,自述文件建议如下:
var uint8array = TextEncoder(encoding).encode(string);
var string = TextDecoder(encoding).decode(uint8array);
Run Code Online (Sandbox Code Playgroud)
如果我还记得,'utf-8'是encoding你需要的,当然你需要换你的缓冲区:
var uint8array = new Uint8Array(utf8buffer);
Run Code Online (Sandbox Code Playgroud)
希望它对你有用,对我来说也是如此.
Esa*_*ija 10
如果您在浏览器中执行此操作,则内置没有字符编码库,但您可以使用:
function pad(n) {
return n.length < 2 ? "0" + n : n;
}
var array = new Uint8Array(data);
var str = "";
for( var i = 0, len = array.length; i < len; ++i ) {
str += ( "%" + pad(array[i].toString(16)))
}
str = decodeURIComponent(str);
Run Code Online (Sandbox Code Playgroud)
这是一个解码3字节UTF-8单元的演示:http://jsfiddle.net/Z9pQE/
| 归档时间: |
|
| 查看次数: |
82917 次 |
| 最近记录: |