VC2008 UTF8轉big5

STRING text_out; api.ProcessPages(image, NULL, 0, &text_out); string S = UTF8ToGBK(text_out.string()); ====================================== string UTF8ToGBK(const std::string& strUTF8) { int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0); unsigned short * wszGBK = new... 顯示更多 STRING text_out;
api.ProcessPages(image, NULL, 0, &text_out);
string S = UTF8ToGBK(text_out.string());


======================================
string UTF8ToGBK(const std::string& strUTF8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
unsigned short * wszGBK = new unsigned short[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0,LPCSTR(strUTF8.c_str()), -1, LPWSTR(wszGBK), len);

len = WideCharToMultiByte(950, 0,LPCWSTR(wszGBK), -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(950,0, LPCWSTR(wszGBK), -1, szGBK, len, NULL, NULL);

std::string strTemp(szGBK);
delete[]szGBK;
delete[]wszGBK;
return strTemp;
}

執行的結果還是亂碼

950部分 ~ BIG5的數字

我是參考大陸那邊寫的 ~ 看是在轉的型態,我把950的LPCSTR改成LPCWSTR
才可以執行的說

我在想一開始它應該是UTF8 ~ 顯示的時候會有亂碼 ~ 我才使用MultiByteToWideChar去轉轉看 ~ 但是轉的結果不如我預期的說

都是亂碼的說
更新: cout<<




更新 2: fwrite( text_out.string(), 1, text_out.length(), output )
存成txt卻可以顯示的說
更新 3: 我測出來了 950 把它弄成CP_ACP
原本本來就是CP_ACP
然後發現是圖的問題
說明一下 ~ 因為在用OCR辨識
跟原本的tesseract.exe 去測試圖片結果跑出 /
還是百思不解 ~ 但是用fopen跟換成辨識率較高的圖片就可以了
謝了!!!!!!!!!!!!!!
1 個解答 1