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 对象。
var encoding = require('encoding');
var result = encoding.convert("ÕÄÖÜ", "Latin_1");
console.log(result); //<Buffer d5 c4 d6 dc>
下面用实例来说明encoding的使用方法:
1.UTF8转GBK
例如"苏A00001"的GBK的对应形式为"CBD5413030303031".
var fs = require('fs');
var encodingConvert = require('encoding');
var buf = require('buffer');
var temp = "苏A00001";
var result = new String();
var resultBuffer = encodingConvert.convert(temp, "GBK","UTF8");
console.log("The resultBuffer is:",resultBuffer);
for(var i = 0;i < resultBuffer.length;i++)
{
result+=resultBuffer.slice(i,i+1)[0].toString(16);
}
result = result.toUpperCase();
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
var fs = require('fs');
var encodingConvert = require('encoding');
var buf = require('buffer');
var temp = "CBD5413030303031";
var bufferArray = [0xcb,0xd5,0x41,0x30,0x30,0x30,0x30,0x31];
var buffer = new Buffer(bufferArray);
console.log("The buffer is:",buffer);
console.log(buffer.toString());
var plateDecoded = encodingConvert.convert(buffer, "UTF8", "GBK");
console.log("The result is:",plateDecoded.toString());

从结果可以得出,如果不使用第11行的代码,则输出的中文是乱码,那是因为"CBD5413030303031"是GBK格式的编码格式,经过第11行的转化,转化成UTF8编码,再进行输出的结果是正确的格式。
Nodejs编码转化问题的更多相关文章
- IOS编码转化
原文地址:http://blog.csdn.net/huifeidexin_1/article/details/7883984 iOS中编码转化 1.UTF-8转化 NSString *data = ...
- golang 编码转化
在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu ...
- 宽字符、多字节、unicode、utf-8、gbk编码转化
今天遇到一个编码的问题,困惑了我很长时间,所以就简要的的了解了一下常用的编码类型. 我们最常见的是assic编码,它是一种单字节编码,对多容纳256个字符. 我们在编程的时候经常遇到unicode,u ...
- [ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)
Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...
- 报表开发工具中mysql数据库连接编码转化失效解决方案
1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...
- java编码转化方案-备用
import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class changeCharSet { /** 7位AS ...
- 将UTF8编码转化为中文 - NSString方法
方法一: 代码如下,如有更好的方法 麻烦贴出来,这个方法是通过webview进行解码的 UIWebView *web = [[UIWebView alloc] init]; NSString *tsw ...
- native2ascii -- 编码转化工具
参考文档 http://blog.chinaunix.net/uid-692788-id-2681133.html 功能说明 Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 ...
- 【java】乱码处理+编码转化+判断字符串编码方式
之前有一篇是修改IDE的编码,服务器的编码等处理乱码,但是在所有环境因素上,保证了编码方式之后,也会有前台传递给后台[get方式提交]传递给后台的编码方式是非UTF-8的,也会有例如FTP服务器的编码 ...
随机推荐
- Web前端图表绘制JQuery插件jqplot
在此之前使用了Chart.js.Highcharts,首先了解一下这两款插件的优势与不足,然后再来了解jqplot. 1.Chart Chart中文官网:http://chartjs.cn/ 1.1优 ...
- 本地和VMware虚拟主机之间的网络访问
在需要设置的虚拟主机节点上右键,点击[设置...] 在打开的虚拟机设置中,选中[网络适配器],之后在右边设置网络连接为[自定义:指定的虚拟网络] 然后设置同一网关即可.
- Storm Topology及分组原理
Storm的通信机制,需要满足如下一些条件以满足Storm的语义. 1.建立数据传输的缓冲区.在通信连接没有建立之前把发送的数据缓存起来.数据发送方可以在连接建立之前发送消息,而不需要等连接建立起来, ...
- 源码阅读笔记 - 1 MSVC2015中的std::sort
大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...
- 顽皮的小球II
感谢世外苏子恒同学提供 uses crt; var x,y,xd,yd,xb,yb:shortint; k:char; procedure intro; begin clrscr; ...
- 【Android 系统开发】Android JNI/NDK (三) 之 JNIEnv 解析
jni.h文件 : 了解 JNI 需要配合 jni.h 文件, jni.h 是 Google NDK 中的一个文件, 位置是 $/Android-ndk-r9d/platforms/android-1 ...
- EventBus的一个bug??
今天遇到了一个很奇怪的问题,activity A打开B,A和B中都注册了eventbus,都会接一个list的参数,当然两个list的参数不同,居然会报一个异常,A中List的参数会变成B的类型,错误 ...
- mybaties中的selectKey和useGeneratedKeys=true
<!-- 账户创建 --><insert id="create" parameterType="Account"> <select ...
- DEBUG STACK TRACE for PoolBackedDataSource.close().
我使用generator生成的代码,xml里面的内容没有覆盖重写,而是在下面直接追加,所以需要把以前的全部删除,然后在用generator生成.如果这个不能解决问题,就查查别人的问题.
- 众安「尊享e生」果真牛的不可一世么?
近日,具有互联网基因的.亏损大户(成立三年基本没盈利,今年二季度末亏损近4亿,你能指望它多厉害?).财产险公司—众安推出“尊享e生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...