匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 5 年前

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 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 個解答

評分
  • Chen
    Lv 6
    5 年前
    最佳解答

    BIG5 is allocated 950 code page in unicode

    GB2312 is allocated 936

    KOREAN code is allocated 949

    JAPAN code is allocated 932

    I have ever coded program ( unicode.c ) which includes below some function.

    int utf8_ucs2(char *putf8, int len, WCHAR *pucs2 );

    int ucs2_utf8(WCHAR *pucs2, int len, unsigned char *putf8 );

    int utf8_utf16(UTF8 *putf8, int len, UTF16 *putf16 );

    int ucs2_utf7( WCHAR *pucs2, int len, char *putf7 );

    int utf7_ucs2(char *putf7, int len, WCHAR *pucs2 );

    void big5_ucs2( char *cstr, WCHAR *wstr);

    void big5_utf8( char *cstr, unsigned char *putf8 );

    void ucs2_big5( WCHAR *wstr, char *cstr );

    void utf8_big5( char *putf8, unsigned char *cstr );

    void gb_ucs2( char *cstr, WCHAR *wstr);

    void gb_utf8( char *cstr, unsigned char *putf8 );

    void ucs2_gb( WCHAR *wstr, char *cstr );

    void utf8_gb( char *putf8, unsigned char *cstr );

    void utf16_utf8( WCHAR *utf16, char *utf8 );

    //void utf8_utf16(char *utf8, WCHAR *utf16);

    void utf16_utf7( WCHAR *pucs2, char *putf7 );

    void utf7_utf16(char *putf7, WCHAR *pucs2);

    /***************below in utf32.c*************************/

    int utf8_utf32(UTF8 *putf8, int len, UTF32 *putf32 );

    int utf32_utf8(UTF32 *putf32, int len, UTF8 *putf8 );

    int utf32_utf16(UTF32 *putf32, int len, UTF16 *putf16);

    int utf16_utf32(UTF16 *putf16, int len, UTF32 *putf32);

    /********************************************************/

    for example:

    圖片參考:https://s.yimg.com/rk/AC08187637/o/147220420.jpg

還有問題?馬上發問,尋求解答。