字串在很多程式語言中都比較特殊,特別在c++中,處理還比較複雜。
在處理編碼轉換時,往往伴隨記憶體的分配和**,這裡提供兩個類,採用raii原則,使用資源管理物件來管理記憶體的分配和釋放。
用windows api實現的轉換類標頭檔案:
//--------------------------------
////
////
oliver chen
//---------------------------------
#ifndef codeconvert_win_h
#define
codeconvert_win_h
//字元編碼轉換類(使用windows的編碼轉換api)
//運用raii原則,管理物件的建構函式中分配資源,由其析構函式負責釋放資源
class
codeconvert_win
;const
char
*tostring() ;
private
:wchar_t
*wcharbuf;
char
*charbuf;
};#endif
//codeconvert_win_h
用windows api實現的轉換類實現檔案
//--------------------------------
////
////
oliver chen
//---------------------------------
#include
"stdafx.h
"#include
<
windows.h
>
#include
"codeconvert_win.h"//
兩種編碼間轉換時,需要先轉換成wchar,然後從wchar轉換到目標編碼(wchar,寬字元,unicode-16編碼)
codeconvert_win::codeconvert_win(
const
char
*input, unsigned
intfromcodepage, unsigned
inttocodepage )
簡單應用:
voidtestcodeconvert_win() }}
基於iconv庫實現的轉換類標頭檔案:
//--------------------------------
////
////
oliver chen
//---------------------------------
#ifndef codeconvert_iconv_h
#define
codeconvert_iconv_h
#include
"iconv.h"//
字元編碼轉換類(使用iconv庫)
//運用raii原則,管理物件的建構函式中分配資源,由其析構函式負責釋放資源
class
codeconvert_iconv
;private
:iconv_t iconv_ptr;
char
*outputbuf;
};#endif
//codeconvert_iconv_h
基於iconv庫實現的轉換類實現檔案:
//--------------------------------
////
////
oliver chen
//---------------------------------
#include
"stdafx.h
"#include
"codeconvert_iconv.h
"codeconvert_iconv::codeconvert_iconv(
const
char
*input,
const
char
*fromcodeset,
const
char
*tocodeset )
}codeconvert_iconv::
~codeconvert_iconv(
void
)
測試函式(基於iconv庫實現的轉換類):
voidtestcodeconvert_iconv() }}
以上兩個類,在xp、2003、win7的中文版本下通過簡單測試。如需要實際應用到產品,應該需要增加異常處理。
Windows和Linux的字元編碼轉換
前談過一篇關於linux下面unicode使用的文章。那個主要是針對多位元組和寬字元的轉換而談的。今天說的有些類似,主要是windows下面關於字元編碼轉換和linux下面的不同。我移植的那部分程式中,有函式是用來實現utf 8和gbk之間的轉換的。其實其他很多不同型別的字元之間轉換都可以用這種方法...
windows下go編碼轉換問題
github 上有兩個 package 做編碼轉換,都是基於 iconv 用到了 cgo,在 linux 下沒有問題,在 windows 下用,非常麻煩。採用 mingw 安裝libiconv 也不行,一直提示找不到 libiconv 方法。最終找到乙個官方實現 純 go實現 gbk轉utf 8 示...
linux下字元編碼轉換
一 利用iconv函式族進行編碼轉換 iconv函式族的標頭檔案是iconv.h,使用前需包含之。include iconv函式族有三個函式,原型如下 1 iconv t iconv open const char tocode,const char fromcode 此函式說明將要進行哪兩種編碼的...