总结一下最近的知识盲区(个人笔记)
1、vs编译出现xxx\zcopy\common\gmssl_use.h : warning C4828: 文件包含在偏移 0x1a1 处开始的字符,该字符在当前源字符集中无效(代码页 65001)
说明源文件 gmssl_use.h
在偏移 0x1a1
位置包含一个非法字符,该字符在你当前的源代码页(65001,也就是 UTF-8)中无效,可能会导致编译问题。
常见原因:
-
源文件中含有非 UTF-8 合法字符(例如拷贝进来的中文注释或特殊符号)。
-
源文件实际是用其他编码格式保存的(如 GBK、ANSI、UTF-16)而不是 UTF-8。
-
某些编辑器保存文件时带了 BOM 或没有按 UTF-8 保存。
解决方案:
✅ 方法一:将文件重新保存为 UTF-8 编码(无 BOM)
使用 Visual Studio 或其他文本编辑器打开该文件,并:
-
在 Visual Studio 中:
-
打开
gmssl_use.h
-
点击菜单
文件 > 另存为
-
点击右下角的下拉箭头旁的“保存”按钮 > 选择“使用编码另存为”
-
选择
UTF-8 无 BOM
或UTF-8,有一个代码页65001就是了。
-
-
或者使用 Notepad++:
-
打开文件
-
菜单栏选择:
编码 > 转换为 UTF-8(无 BOM)
-
保存文件
-
✅ 方法二:清理非法字符
可以跳转到警告中说的偏移位置 0x1a1
(即 417 字节),在编辑器中查看这一行可能有哪些特殊字符或乱码,手动清理或替换。
✅ 方法三:修改项目设置使用正确的代码页
如果必须使用某种非 UTF-8 编码(如 GBK),可以在 Visual Studio 中设置:
-
项目属性 > C/C++ > 高级 > 源文件编码
-
设置为对应的代码页(如 936 表示 GBK)
不过更推荐统一使用 UTF-8 作为编码方式。
2、g_base64 加密后数据长度变么?
是的,Base64 加密(准确说叫编码)后,数据长度一定会变长。📈
并且它有一套非常固定的规则!
✨ 详细规则是:
-
原数据每3个字节,编码成4个字符。
-
如果数据不是3的倍数,后面会用
=
补齐。