消息关闭
    暂无新消息!

如何比对未知编码的中文字符串

问题作者 : Mawhinney2017-08-21发布
现在要从多个来源-可能是不同编码的TXT(ANSI,UnidoceUnicode big endian),CString宽字符,Word,Excel,网页抓取等任意中文字符串来源且不知道其字符编码,如何进行两个字符串的比对?

5个回答

︿ 3
仅供参考:
#define _UNICODE 1
#pragma warning(disable:4305 4309)
#pragma comment(lib,"ole32")
#pragma comment(lib,"comsupp")
#include <cstdio>
#include <objbase.h>
#include <comip.h>
#include <mlang.h>
#include <tchar.h>

typedef _com_ptr_t<_com_IIID<IMultiLanguage3, &IID_IMultiLanguage3> > IMultiLanguage3Ptr;

int main() {
    CoInitialize(NULL);
    {
        IMultiLanguage3Ptr pML(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC);
        char data[] = { 0xD6, 0xD0, 0xCE, 0xC4, 0xB1, 0xE0, 0xC2, 0xEB };
        int isize = sizeof(data);
        DetectEncodingInfo result[32];
        int result_count = sizeof(result) / sizeof(result[0]);
        HRESULT hr = pML->DetectInputCodepage(MLDETECTCP_NONE, 0, data, &isize, result, &result_count);
        if (!SUCCEEDED(hr))
        {
            fprintf(stderr, "Failed with 0x%x\n", hr);
            CoUninitialize();
            return hr;
        }
        for (int i = 0; i < result_count; i++)
        {
            WCHAR desc[100] = {0};
            pML->GetCodePageDescription(result[i].nCodePage, result[i].nLangID, desc, 100);
            printf("CP:%d (%S)\n", result[i].nCodePage, desc);
        }
    }
    CoUninitialize();
    return 0;
}
//CP:936 (Chinese Simplified (GB2312))
//
︿ 2
1.确定其编码方式;
2.转换到统一编码,比如UNICODE
3.用统一编码进行比较
︿ 1
例如utf-8编码的“我和你”和ANSI编码的“我和你”来自不同来源,可能是任意编码,其数据是不一样的,无法用==,strcmp等做对比,却要求返回其相等,该如何操作?条件是不知道“我和你”字符串的编码