MFC GBK檔案與UTF8檔案編碼互轉

2021-07-10 14:31:43 字數 3545 閱讀 3168

訪問密碼 528c

關鍵**如下:

一、獲取路徑中的指定檔案型別的檔案

void cencoddlg::findinall(lpctstr lpszpath)

; cfilefind finder;

cstring strpath(lpszpath);

strpath += _t("\\*.*");

bool bexist = finder.findfile(strpath);

while (bexist)

cstring fpath = finder.getfilepath();

cstring ext = fpath.right(fpath.getlength() - fpath.reversefind('.') - 1);

auto inarray = (cstring ext,vectorvc)

}return false;

};if (!vc.empty() && !inarray(ext, vc))

m_files.push_back(fpath);

}}

二、獲取指定目錄下的檔案

void cencoddlg::onbnclickedselectdir()

三、獲取指定檔案

void cencoddlg::onbnclickedselectfile()

; cfiledialog dlgfile(true, null, null, ofn_hidereadonly, type + _t("所有檔案 (*.*)|*.*||"), null);

openfilename& ofn = dlgfile.getofn();

ofn.flags |= ofn_allowmultiselect;

if (dlgfile.domodal())

} showallfiles();

}

四、把所有檔案路徑顯示在左側

void cencoddlg::showallfiles()

lc->detach();

}

五、根據編碼轉化檔案

void cencoddlg::onbnclickedok()

if (m_fromencod.getcursel() != m_toencod.getcursel())

uint nfilelen = 0;

strcoding * cod = new strcoding;

for (auto e : m_files)

istreambuf_iteratorbeg(in), end;

string str_in(beg,end);

string str_out;

if (m_fromencod.getcursel() == 1)

else

in.close();

ofstream out;

out.open(e.getbuffer());

if (!out.is_open())

out << str_out << endl;

out.close();

} setdlgitemtext(idc_status, _t("轉換完畢"));

delete cod;

}

六、編碼轉換類

//這是個類strcoding (strcoding.h檔案)  

#pragma once

#include #include #include using namespace std;

class strcoding

;

//這是個類strcoding (strcoding.cpp檔案)  

#include "stdafx.h"

#include "strcoding.h"

strcoding::strcoding(void)

strcoding::~strcoding(void)

void strcoding::gb2312tounicode(wchar* pout, char *gbbuffer)

void strcoding::utf_8tounicode(wchar* pout, char *ptext)

void strcoding::unicodetoutf_8(char* pout, wchar* ptext)

void strcoding::unicodetogb2312(char* pout, wchar udata)

//做為解url使用

char strcoding::chartoint(char ch)

char strcoding::strtobin(char *str)

//utf_8 轉gb2312

void strcoding::utf_8togb2312(string &pout, char *ptext, int plen)

else

}rst[j] = '\0';

pout = rst;

deleterst;

}//gb2312 轉為 utf-8

void strcoding::gb2312toutf_8(string& pout, char *ptext, int plen)

; asciistr[0] = (ptext[i++]);

} else

}return;

}//把str編碼為網頁中的 gb2312 url encode ,英文不變,漢字雙位元組 如%3d%ae%88

string strcoding::urlgb2312(char * str)

else if (isspace((byte)str[i]))

else

}return dd;

}//把str編碼為網頁中的 utf-8 url encode ,英文不變,漢字三位元組 如%3d%ae%88

string strcoding::urlutf8(char * str)

; sprintf_s(tempbuff,sizeof(tempbuff), "%c", (byte)tt.at(i));

} else if (isspace((byte)tt.at(i)))

else

}return dd;

}//把url gb2312解碼

string strcoding::urlgb2312decode(string str)

else if (str[i] == '+')

else

} return output;

}//把url utf8解碼

string strcoding::urlutf8decode(string str)

UTF8檔案讀寫

2009 04 07 12 00 56 分類 預設分類 舉報 字型大小訂閱 基本方法 使用vs2005提供的功能讀utf 8文字檔案,並將內容轉存在以unicode儲存的記憶體空間 如果需要寫出則使用二進位制方式開啟檔案,使用windows api函式widechartomultibyte轉換好後再...

Windows下列印utf 8檔案

估計入門時都會遇到的。我是在windows下用的python25自帶的idle編輯執行的,發現執行指令碼得出的結果有一些中文顯示是亂碼,但有一些是 正常的。百思不得其解。首先檢視了一下原始檔的編碼格式,是utf 8。經過搜尋再搜尋,除錯再除錯,也換了幾個編譯器,發現比idle還糟糕 可能需要 進行e...

去除 UTF 8 檔案 BOM 頭

bom 全稱是 byte order mark 位元組順序標記 出現在文字檔案頭部,unicode 編碼標準中用於標識檔案是採用哪種格式的編碼。比如 當用記事本儲存乙個以 utf 8 編碼的檔案時,會自動在檔案開始自動插入三個不可見字元 0xef 0xbb 0xbf 但是通常情況下不需要這個頭部來識...