Javascript如何将中文转换Unicode16字节数组

之前因为项目的需要,需要把带有中文的字符串转换成字节数组和图片数据合并后,以二进制数据上传给服务器端。

之前,看到网上有利用Array.prototype.map.call(str, function (c) { return c.charCodeAt(0); })方法将字符串转换成字节数组,但实测结果表明该方式实现了下列功能:

1、若字符是单字节字符,则用一个小于128的数值来表示。

2、若字符是双字节字符,例如中文,则用一个大于256的数值来表示。

根据测试结果表明,该方式仅仅是将字符串转换成了Unicode编码数组,而非字节数组。

因此,还需要将生成的数组中值切实的转换成双字节来表示。具体代码如下:

var str = "转换测试数据";
var arr = Array.prototype.map.call(str, function (c) { return c.charCodeAt(0); });
arr = ToUTF16(arr);

function ToUTF16(arr) {
    var result = new Array();

    var k = 0;
    for (var i = 0; i < arr.length; i++) {
        result[k++] = arr[i] & 0xFF;
        result[k++] = arr[i] >> 8;
    }

    return result;
}

根据上述经验,整理了中文转换成UTF16和UTF8的代码如下,在Google的Chrome中测试通过。

function ToUTF16(str) {
    var result = new Array();

    var k = 0;
    for (var i = 0; i < str.length; i++) {
        var j = str[i].charCodeAt(0);
        result[k++] = j & 0xFF;
        result[k++] = j >> 8;
    }

    return result;
}

function ToUTF8(str) {
    var result = new Array();

    var k = 0;
    for (var i = 0; i < str.length; i++) {
        var j = encodeURI(str[i]);
        if (j.length==1) {
            // 未转换的字符
            result[k++] = j.charCodeAt(0);
        } else {
            // 转换成%XX形式的字符
            var bytes = j.split("%");
            for (var l = 1; l < bytes.length; l++) {
                result[k++] = parseInt("0x" + bytes[l]);
            }
        }
    }

    return result;
}
时间: 2024-07-31 04:13:59

Javascript如何将中文转换Unicode16字节数组的相关文章

JavaSE8基础 String getBytes 将不含中文的字符串转换成字节数组

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t01; import java.nio.charset.Charset; public class Demo01 { public static void main(String[] args) { String str = "[email protected]#$&qu

java将InputStream转换成字节数组

public class InputStream2ByteArray { public static void main(String[] args) throws IOException { InputStream in=new FileInputStream("/tmp/req.data"); byte[] data=toByteArray(in); in.close(); FileOutputStream out=new FileOutputStream("/tmp/r

Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换

public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ public static String StringToAsciiString(String content) { String result = ""; int max = content.length(); for (int i = 0; i < max; i++) { char c

android byte字节数组转换十六进制字符串(物联网开发总结)

想起前段时间的物联网的外包开发,经常遇到通过wifi接受的数据,要通过转换成十六进制字符串,或者最后又是十进制数据.都是根据双方的协议来开发的.那么我发送过去的数据也需要,经过特殊转换成byte字节发过去,硬件那边收到不至于乱码的数据. 1.硬件调试发给android这边是十六进制数据 原始数据:68 38 38 68 A 72 78 55 34 12 43 23 01 07 Y 00 00 00 0C 13 78 56 34 12 0C 3B 78 34 12 0C 26 78 56 34 1

C#字节数组转换成字符串

C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding.该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将C#字节数组转换成字符串. System.Text.Encoding 类似乎没有可用的构造函数,但我们可以找到几个默认的 Encodin

C#--整型与字节数组byte[]之间的转换

转:https://www.cnblogs.com/dayang12525/p/6393941.html using System; int  i = 123;byte [] intBuff = BitConverter.GetBytes(i);     // 将 int 转换成字节数组lob.Write(intBuff, 0, 4);i = BitConverter.ToInt32(intBuff, 0);           // 从字节数组转换成 int double x = 123.45

C# 从字节数组读取基础数据

C#的byte[]和AS3中的ByteArray都是字节数组.但是明显的AS3的ByteArray更加好用一些.因为在ByteArray当中有一个position属性,可以读取相应的字节后,自动指向下一个没有读取的字节的index.这样你永远不用自己再建一个index来手动的处理这件事情了.当然,ByteArray还有其他的一些方法和属性,是byte[]没有的.我这里强调,并非贬低C#,只是在这一块,需要做一些多余的事情,显得相当的繁琐.为此我封装了一个类库,核心类 BytesDecode 如下

C#字节数组的常用解码处理方法

在某些情况下,比如说串口通信或者读取二进制的文件,通畅会得到一个byte数组形式的数据. 然而对于这个数据处理常常令人苦恼,因为通常通信情况下,并不是一个字节代表一个字符或者某个数据,而是数据夹杂在字节与字节之间. 读取文件得到的情况: FileInfo fi = new FileInfo(@"E:\ABC.DAT"); long len = fi.Length; FileStream fs = new FileStream(@"E:\ABC.DAT", FileM

java常用流处理工具StreamTool 常见的InputStream流转字符串, 转字节数组等等

原文:java常用流处理工具StreamTool 常见的InputStream流转字符串, 转字节数组等等 源代码下载:http://www.zuidaima.com/share/1550463397366784.htm ava 常用流处理工具 StreamTool ,常见的InputStream 流转字符串, 转字节数组等等 **应用场景: ** 1. 文件上传 2. js / css / img 等文件读取输出. 转字符串输出 (js & css) , 转字节数组输出 (img .. swf