目前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编码转化问题的更多相关文章

  1. IOS编码转化

    原文地址:http://blog.csdn.net/huifeidexin_1/article/details/7883984 iOS中编码转化 1.UTF-8转化 NSString *data =  ...

  2. golang 编码转化

    在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu ...

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

    今天遇到一个编码的问题,困惑了我很长时间,所以就简要的的了解了一下常用的编码类型. 我们最常见的是assic编码,它是一种单字节编码,对多容纳256个字符. 我们在编程的时候经常遇到unicode,u ...

  4. [ACM_模拟] POJ1068 Parencodings (两种括号编码转化 规律 模拟)

    Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...

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

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...

  6. java编码转化方案-备用

    import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class changeCharSet { /** 7位AS ...

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

    方法一: 代码如下,如有更好的方法 麻烦贴出来,这个方法是通过webview进行解码的 UIWebView *web = [[UIWebView alloc] init]; NSString *tsw ...

  8. native2ascii -- 编码转化工具

    参考文档 http://blog.chinaunix.net/uid-692788-id-2681133.html 功能说明 Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 ...

  9. 【java】乱码处理+编码转化+判断字符串编码方式

    之前有一篇是修改IDE的编码,服务器的编码等处理乱码,但是在所有环境因素上,保证了编码方式之后,也会有前台传递给后台[get方式提交]传递给后台的编码方式是非UTF-8的,也会有例如FTP服务器的编码 ...

随机推荐

  1. 操作系统中前台进程与后台进程(适用于Linux)

    两种进程的主要区别: 1.前台进程用户可以操作,后台进程用户不能操作(除了把它关闭). 2.前台进程不全是由计算机自动控制,后台进程全都是由计算机自动控制. 3.后台进程一般用作系统服务,可以用cro ...

  2. 织梦如何重新安装 织梦dir 二次安装

    一般安装过一次织梦就不需要重新再去下载安装第二次了,我们可以在原有的基础上重新安装一次.这个是织梦cms后台自带的功能,还比较方便,下面小编就分享下如何重装织梦. 如果在本地重装要打开集成环境,在浏览 ...

  3. [ActionScript 3.0] 喷泉效果

    pall为水珠影片剪辑 var count:int = 500; var zl:Number = 0.5; var balls:Array; balls = new Array(); for (var ...

  4. 新建jsp报错“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”

    今天新建jsp文件时,就报错“Visual Page Editor has experimental support for Windows 64-bit”,然后刚好stackoverflow上面有这 ...

  5. ubuntu12.04 修改 主机名(hostname)

    1. sudo vim /etc/hostname -> hostname2. sudo vim /etc/hosts         -> 127.0.1.1       hostnam ...

  6. 转:RealThinClient (RTC)是什么?

    RealThinClient SDK是用于开发标准的HTTP(S)服务器,ISAPI扩展以及客户端的VCL控件.可用于Windows下的CodeGear Delphi 6-XE5. 功能描述 Abou ...

  7. js节点属性

    在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType :节点的类 ...

  8. FizzlerEx —— 另一个HtmlAgilityPack的CSS选择器扩展,

    之前我介绍过HtmlAgilityPack的CSS选择器扩展——ScrapySharp,它可以非常方便的实现通过CSS选择器表达式来查询HtmlNode.今天在使用的过程中,发现它不支持nth-chi ...

  9. 通过反汇编理解函数调用机制(x86和ARM)

    如下,一个简单的程序 #include <stdio.h> int add(int a, int b) { return a + b; } void main() { , b = ; in ...

  10. mongo 查找附近点

    db.runCommand({geoNear:"demo", near: { type: "Point" , coordinates: [118.134535, ...