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

不会再变le 2017-08-21 02:22:45
现在要从多个来源-可能是不同编码的TXT(ANSI,UnidoceUnicode big endian),CString宽字符,Word,Excel,网页抓取等任意中文字符串来源且不知道其字符编码,如何进行两个字符串的比对?
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bravery36 2017-08-21
  • 打赏
  • 举报
回复
都转成unicode再比较.
赵4老师 2017-08-21
  • 打赏
  • 举报
回复
仅供参考:
#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))
//
cain-won 2017-08-21
  • 打赏
  • 举报
回复
把两个未知的编码都转换成一个已知的编码,然后再比较。
Really_want 2017-08-21
  • 打赏
  • 举报
回复
1.确定其编码方式; 2.转换到统一编码,比如UNICODE 3.用统一编码进行比较
不会再变le 2017-08-21
  • 打赏
  • 举报
回复
例如utf-8编码的“我和你”和ANSI编码的“我和你”来自不同来源,可能是任意编码,其数据是不一样的,无法用==,strcmp等做对比,却要求返回其相等,该如何操作?条件是不知道“我和你”字符串的编码

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧