这个编码是什么符号? 11001011 10101110

Really_want 2017-09-01 02:48:51
如题描述。十六进制是 CB AE
这两个字节是通过在记事本中输入“水”字产生的,默认ANSI格式。
保存文件,并再次打开文件,并不是“水”字!
经过查询,满足这两个字节满足UTF-8编码格式模版 110xxxxx 10xxxxxx
那么问题来了,如果程序读到这两个字节,该认为是ANSI(或GB2312)呢还是UNICODE(UTF-8)呢?
谁能告诉我这是什么编码?
...全文
410 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-09-05
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
Really_want 2017-09-04
  • 打赏
  • 举报
回复
引用 15 楼 zilaishuichina 的回复:
.... 1、记事本(绝大部分的纯文本编辑工具)并没有保证它一定会记录你的编码方式,也没有保证它会按照你意图的编码方式去解码,只是在解码(显示)的时候预读一段内容,根据这段内容,去猜这份文本内容是否更匹配某种编码方式,然后按对应解码方式来解码(显示) 2、按A方式编码,再按B方式解码,并不等价于按B方式解码是有问题的。 数据还是那份数据,CB AE依然是CB AE。只是人脑识别不了而已,你不能直接读懂CB AE代表的中文意思,你只能读懂“水”所代表的中文意思。 但是请注意,人识别不了, 并不等价于解码出bug了
你的解释回答,完全正确,对此我没有任何不解。但我还是对把“水”字“翻译”成了引号,表示深深的忧伤!
zilaishuichina 2017-09-04
  • 打赏
  • 举报
回复
引用 8 楼 ccssddnn218 的回复:
[quote=引用 7 楼 zilaishuichina 的回复:] 不是我们告诉你它是什么编码, 而是应该你来告诉我们它是什么编码, 然后你希望的又是什么编码 我告诉你这是一截protobuf序列化之后的编码,有用么 你希望它是什么编码,它就是什么编码,你看到的编码不对,是因为人的大脑不能接受乱码,而不是计算机解码不对
谢谢答疑,我的焦点请回看#2楼[/quote] 我说的就是你的焦点 1、记事本(绝大部分的纯文本编辑工具)并没有保证它一定会记录你的编码方式,也没有保证它会按照你意图的编码方式去解码,只是在解码(显示)的时候预读一段内容,根据这段内容,去猜这份文本内容是否更匹配某种编码方式,然后按对应解码方式来解码(显示) 2、按A方式编码,再按B方式解码,并不等价于按B方式解码是有问题的。 数据还是那份数据,CB AE依然是CB AE。只是人脑识别不了而已,你不能直接读懂CB AE代表的中文意思,你只能读懂“水”所代表的中文意思。 但是请注意,人识别不了, 并不等价于解码出bug了
Really_want 2017-09-04
  • 打赏
  • 举报
回复
引用 13 楼 zhao4zhong1 的回复:
仅供参考:
#define _UNICODE 1
#pragma warning(disable:4305 4309)
#pragma comment(lib,"ole32")
....
//CP:936 (Chinese Simplified (GB2312))
//
谢谢您的参考代码,能否用汉语(而不是C)简要的概述一下?
zwfgdlc 2017-09-04
  • 打赏
  • 举报
回复
严格来说算是记事本的BUG,记事本并没有提供保存为UTF8无BOM这种格式, 保存为UTF8,UNICODE BE,UNICODE LE这些格式都是有BOM的, 没有BOM的文件是本机的默认ANSI编码解析, 但是偏偏是这个水字没有BOM的情况下,直接以UTF8编码解析
赵4老师 2017-09-03
  • 打赏
  • 举报
回复
仅供参考:
#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))
//
Really_want 2017-09-02
  • 打赏
  • 举报
回复
引用 11 楼 zwfgdlc 的回复:
[quote=引用 10 楼 ccssddnn218 的回复:] 回复#9楼, 谢谢。UTF-8编码的CBAE是什么字符呢?
我把TXT保存成文件后打开,是个双引号 然后尝试用UTF8转成UNICODE,对应的UNICODE码是02EE 然后查了下UNICODE字符表,02EE对应的也是个双引号 这应该是个BUG了[/quote] 分析引证完整,谢谢。结论有点勉强。
Really_want 2017-09-02
  • 打赏
  • 举报
回复
回复#9楼,
谢谢。UTF-8编码的CBAE是什么字符呢?
zwfgdlc 2017-09-02
  • 打赏
  • 举报
回复
引用 10 楼 ccssddnn218 的回复:
回复#9楼, 谢谢。UTF-8编码的CBAE是什么字符呢?
我把TXT保存成文件后打开,是个双引号 然后尝试用UTF8转成UNICODE,对应的UNICODE码是02EE 然后查了下UNICODE字符表,02EE对应的也是个双引号 这应该是个BUG了
zwfgdlc 2017-09-01
  • 打赏
  • 举报
回复
水字的BGK编码:cbae UNICODE是:6c34 utf8是:e6b0b4
Really_want 2017-09-01
  • 打赏
  • 举报
回复
引用 7 楼 zilaishuichina 的回复:
不是我们告诉你它是什么编码, 而是应该你来告诉我们它是什么编码, 然后你希望的又是什么编码 我告诉你这是一截protobuf序列化之后的编码,有用么 你希望它是什么编码,它就是什么编码,你看到的编码不对,是因为人的大脑不能接受乱码,而不是计算机解码不对
谢谢答疑,我的焦点请回看#2楼
zilaishuichina 2017-09-01
  • 打赏
  • 举报
回复
不是我们告诉你它是什么编码, 而是应该你来告诉我们它是什么编码, 然后你希望的又是什么编码 我告诉你这是一截protobuf序列化之后的编码,有用么 你希望它是什么编码,它就是什么编码,你看到的编码不对,是因为人的大脑不能接受乱码,而不是计算机解码不对
x_xx_xxx_xxxx 2017-09-01
  • 打赏
  • 举报
回复
引用 5 楼 ccssddnn218 的回复:
[quote=引用 4 楼 woshi_hujunjun 的回复:] 为什么你们发帖可以选10分,我怎么感觉至少是30分
我明明设的是一百分,你怎么看的?[/quote] 哈哈哈
Really_want 2017-09-01
  • 打赏
  • 举报
回复
引用 4 楼 woshi_hujunjun 的回复:
为什么你们发帖可以选10分,我怎么感觉至少是30分
我明明设的是一百分,你怎么看的?
woshi_hujunjun 2017-09-01
  • 打赏
  • 举报
回复
为什么你们发帖可以选10分,我怎么感觉至少是30分
幻夢之葉 2017-09-01
  • 打赏
  • 举报
回复
不能,TXT一般判断编码是取一定数量的字节进行分析之后,选取最可能的作为显示的编码 用户也可以手动更改解析的编码
Really_want 2017-09-01
  • 打赏
  • 举报
回复
引用 1 楼 zwfgdlc 的回复:
没有办法,记事本也要用BOM做记号才知道是什么编码
搞笑的是,记事本自己编的码,把“水”字编码为 CB AE,然后自己再读出来居然不认识了,认为是UTF-8的“引号”? 操作“文件-另存为”时默认格式变为UTF-8
zwfgdlc 2017-09-01
  • 打赏
  • 举报
回复
没有办法,记事本也要用BOM做记号才知道是什么编码

64,643

社区成员

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

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