C++在处理unicode上一向是太弱,即使有w_char的选项,但是在跨平台和兼容性上面实在是欠佳。
现在有个任务,是要先将utf8文本读入内存,并转换为unicode,从而处理unicode。
思路就是通过一个不太复杂的解码算法,将utf8文本,解码成unsigned short的数组,也就是一个unicode用一个short表示。
但是细化到具体实现还是比较复杂的,因为要考虑到大端小端的问题,还要有从unicode转换为utf8的编码程序。
其实这个问题也是一个较为普遍的问题, 网上已经有较为成熟的做法。
http://utfcpp.sourceforge.net/
只需要#include "utf8.h"
string line;
getline(fin, line)//从utf8文件中读取一行
将utf8文本转为unicode的数组
vector<unsigned short> utf16line; utf8::utf8to16(line.begin(), line.end(), back_inserter(utf16line));
将unicode的数组转utf8
string utf8line; utf8::utf16to8(utf16line.begin(), utf16line.end(), back_inserter(utf8line));