Windows下的字元編碼轉換的兩個C 輔助類

2022-07-17 07:00:16 字數 2451 閱讀 3197

字串在很多程式語言中都比較特殊,特別在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 )

簡單應用:

void

testcodeconvert_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庫實現的轉換類):

void

testcodeconvert_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 此函式說明將要進行哪兩種編碼的...