Nodejs编码转化问题

目前Node.js仅支持hex、utf8、ascii、binary、base64、ucs2几种编码的转换。对于GBK,GB2312等编码,Nodejs自带的toString()方法不支持,因此中文转化的时候需要加载第三方库,主要有两个编码转换库iconv-lite和encoding,个人推荐使用encoding。

iconv-lite:是 iconv 的纯 js 实现,支持的编码包括 node.js 原生编码:utf8, ucs2, ascii, binary, base64;同时支持广泛使用的单字节编码:Windows 125x family, ISO-8859 family, IBM/DOS codepages, Macintosh family, KOI8 family, latin1, us-ascii;多字节编码:gbk, gb2313, Big5, cp950。

encoding:是对 node-iconv 和 iconv-lite 的再次封装,encoding 首先调用 node-iconv,如果 node-iconv 无法解析,则调用 iconv-lite 作为替代方案。

encoding 安装使用

1. 安装

npm install encoding

2.使用

encoding 模块就一个方法 convert(),使用方法为:encoding.convert(text, toCharset, fromCharset)。

  • text: 需要转换的对象,可以为 Buffer 或者 String 对象。
  • toCharset: 转换后的编码。
  • fromCharset: 转换前的编码,缺省为 uft8。

转换后的结果为 Buffer 对象。

1 var encoding = require(‘encoding‘);
2
3 var result = encoding.convert("ÕÄÖÜ", "Latin_1");
4 console.log(result); //<Buffer d5 c4 d6 dc>

下面用实例来说明encoding的使用方法:

1.UTF8转GBK

例如"苏A00001"的GBK的对应形式为"CBD5413030303031".

 1 var fs = require(‘fs‘);
 2 var encodingConvert     = require(‘encoding‘);
 3 var buf                 = require(‘buffer‘);
 4 var temp = "苏A00001";
 5 var result = new String();
 6
 7 var resultBuffer = encodingConvert.convert(temp, "GBK","UTF8");
 8 console.log("The resultBuffer is:",resultBuffer);
 9
10 for(var i = 0;i < resultBuffer.length;i++)
11 {
12
13     result+=resultBuffer.slice(i,i+1)[0].toString(16);
14
15 }
16 result = result.toUpperCase();
17
18 console.log("The result is:",result);

即第8行的resultBuffer是一个buffer,其内容就是对应的"CBD5413030303031",只不过要通过第16行进行大写转化。

第13行的作用就是取Buffer的每一位,resultBuffer.slice(i)的结果为<Buffer cb>,<Buffer d5>,<Buffer 41>,<Buffer 30>,<Buffer 30>,<Buffer 30>,<Buffer 30>,<Buffer 31>.

resultBuffer.slice(i)[0]的结果为203,213,65,48,48,48,48,49,由于Buffer里的是二进制,此结果就是二进制对应的十进制结果,再把其转化成16进制就是最后的结果。

2.GBK转UTF8

 1 var fs = require(‘fs‘);
 2 var encodingConvert     = require(‘encoding‘);
 3 var buf                 = require(‘buffer‘);
 4
 5 var temp = "CBD5413030303031";
 6 var bufferArray = [0xcb,0xd5,0x41,0x30,0x30,0x30,0x30,0x31];
 7 var buffer = new Buffer(bufferArray);
 8 console.log("The buffer is:",buffer);
 9 console.log(buffer.toString());
10
11 var plateDecoded = encodingConvert.convert(buffer, "UTF8", "GBK");
12
13 console.log("The result is:",plateDecoded.toString());
时间: 2024-08-08 22:03:08

Nodejs编码转化问题的相关文章

IOS编码转化

原文地址:http://blog.csdn.net/huifeidexin_1/article/details/7883984 iOS中编码转化 1.UTF-8转化 NSString *data = @"你好,北京!"; //转换成UTF-8 NSString *dataUTF8 = [datastringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@",dataUTF8);

golang 编码转化

在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu/iconv 如果我们在windows下使用这个库,会看到错误: iconv.go:6:20: fatal error: iconv.h: No such file or directory compilation terminated. 这是因为需要系统有 iconv.h 文件. linux.ma

宽字符、多字节、unicode、utf-8、gbk编码转化

今天遇到一个编码的问题,困惑了我很长时间,所以就简要的的了解了一下常用的编码类型. 我们最常见的是assic编码,它是一种单字节编码,对多容纳256个字符. 我们在编程的时候经常遇到unicode,unicode是一种宽字节编码,能够很好的融合世界各个国家的字符,具有国际通用性,所谓宽字符其实使用两个字节来表示一个符号. 而utf8是一种多字节编码,一个字符所占用的字节数不确定,是对unicode的精简版本,也用具有世界通用性.Gbk也是一种双字节编码,其实就是对中文简体的一种编码,不具有世界通

native2ascii -- 编码转化工具

参考文档 http://blog.chinaunix.net/uid-692788-id-2681133.html 功能说明 Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 Unicode 编码(udddd 记号)字符的文件.native2ascii 将含有其它字符编码的文件转换成含 Latin-1 和/或 Unicode 编码字符的文件.若省略 outputfile,则使用标准输出设备输出.此外,如果也省略 inputfile,则使用标准输入设备输入. 语法:nat

将UTF8编码转化为中文 - NSString方法

方法一: 代码如下,如有更好的方法 麻烦贴出来,这个方法是通过webview进行解码的 UIWebView *web = [[UIWebView alloc] init]; NSString *tsw = @"%E4%B8%AD%E5%9B%BD"; NSString *sc = [NSString stringWithFormat:@"decodeURIComponent('%@')",tsw]; NSString *st = [web stringByEvalu

报表开发工具中mysql数据库连接编码转化失效解决方案

1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方案 2.1 检查系统的默认字体 例如查看windows下C/window/fonts的字体样式,如下图: 如果没有以上字体,百度一下缺少字体自行安装,安装之后,已经包含以上的字体如果还是出现问题,则需要参看及修改MySQL字符集. 2.2 参看及修改MySQL字符集 · 查看MySql字符集 MyS

批量编码转化工具(实现文件编码的自动检测)

先看截图 工具对.c,.h,.cpp,.txt文件进行转换,其余类型文件,则仅仅拷贝到转换后的输出路径.这种处理是为了转换前和转换后的项目结构保持不变. 工具中一个重要的部分,是对文件编码的自动检测(选项为Auto的情况) 此部分使用了第三方组件(NonCodeNet) 调用代码如下: public string getFileEncoding(string filePath) { string uni = string.Empty; Stream stream = File.Open(file

Java字符编码的转化问题

概述: 我想字符串的编码问题的确会困扰到非常多开发人员.我近期也是被困扰到了. 问题是这种,我们通过二维码扫描来获得二维码中的信息.可是.我们的二维码的产生过程却是"多样化"的.即在产生二维码的时候是以不同的字符串编码类型进行编码的.比方,GBK.GB2312.UTF-8等等.而这些不同的编码类型会产生不同的字节.在Java中.GBK和GB2312都是1个汉字占2个字节,UTF-8是1个汉字占3个字节.而ISO编码则是1上汉字1个字节.这样一来,我们在扫描二维码的时候就会出现一些&qu

nodeJS之二进制buffer对象

前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中处理二进制数据流.现在TypedArray已经被添加进ES6中,Buffer类以一种更优与更适合Node.js用例的方式实现了Uint8Array.本文将详细介绍buffer对象 概述 由于应用场景不同,在Node中,应用需要处理网络协议.操作数据库.处理图片.接收上传文件等,在网络流和文件的操作中