今天项目上遇到了需要将 SJIS(Shift-JIS) 格式与 UTF8 格式相互转换问题。
首先看一个编码格式问题引发的乱码现象,新建下面的文本文档,然后更名为 test.bat。
@echo off
echo test chinese character view 测试中文字符显示
pause
双击运行
用 chcp 查看编码格式
发现是乱码,明明是中文系统,而且是中文还会乱码,很奇怪吧。
十进制码值 | 对应编码名称 |
---|---|
950 | 繁体中文 |
65001 | Unicode (UTF-8) |
936 | 简体中文默认的GBK |
932 | 日文(Shift-JIS) |
更改 CMD 编码格式,在运行输入框里面输入regedit
找到 [HKEY_CURRENT_USER\Console\%SystemRoot%_System32_cmd.exe] ,如果没有就追加下
在该项下新建一个 DWORD(32位值),命名为 CodePage
,值设为 65001
重新打开个 CMD 即可。在次运行 test.bat。
那么为什么原来不好使呢,因为 test.bat 的编码格式是 utf8。如果改成 GBK,在控制台编码格式是 936 的情况下也能好使。
最后回到 SJIS(Shift-JIS) 与 UTF8 格式相互转换问题上,试了很多插件,发现 iconv-lite 很好用
var iconv = require('iconv-lite');
str = iconv.decode(iconv.encode("縺薙↓縺。縺ッ", 'sjis'), 'utf-8');
str2 = iconv.decode(iconv.encode(str, 'utf-8'), 'sjis');
str3 = iconv.decode(iconv.encode(str2, 'sjis'), 'utf-8');
console.log(str); // こにちは
console.log(str2); // 縺薙↓縺。縺ッ
console.log(str3); // こにちは