- 主题:请教UTF8和ANSI 转换问题,要抓狂了。
Windows 上的正确姿势是在程序内部始终使用 WCHAR(就是微软所谓的 "Unicode",实际上特指 UTF-16),只在输入输出时若有必要才进行编码转换
【 在 easior (潜行) 的大作中提到: 】
: Windows 的本地化策略集到底怎么定的,中文版程序内码必须是 cp936 吗?
: 在 Codeblocks 中,MinGW 编译带中文字串的程序,好像必须在区域设置里勾选中文,
: 否则,无论怎么调整其他区域语言以及UTF-8本地策略集,都会出现乱码。
: ...................
--
FROM 183.60.88.*
这个在 exe 里只能是 UTF-16
编译器需要知道源代码的编码,VS 里面有配置,GCC 有 -finput-charset
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 这个在标准里面并没有说明是存储在 EXE 里面的是 GBK 还是 UTF16,
: 跟编译器的实现有关。跟源代码也有关。
--
修改:vonNeumann FROM 183.60.88.*
FROM 183.60.88.*
我们之前有些代码积极拥抱新标准,用了 u8"..." 来强调字符串是 UTF-8 编码(其实源代码也是 UTF-8,加个 u8 只是为了强调)
结果 C++20 把 u8"..." 的类型从 const char[] 改成 const char8_t[],而且 const char8_t* 还不能隐式转为 const char*,一堆地方要改,一种吃了屎的感觉
如果说标准建议凡是 Unicode 字符串都用 char8_t/char16_t/char32_t,想要 deprecate 掉 char/wchar_t,那也行,我都能接受这种阵痛。但尼玛他们又不把支持搞全,std::locale 不支持也就算了,连 C++20 才新增的 std::format 也只有 char/wchar_t 的版本,没有 char8_t/char16_t/char32_t 的版本,真是不知道他们想给我们什么导向。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 个人觉得 win msvc 的做法是不对的。c++11 的标准引入 u8, u 这些做法也是自讨苦吃。
: 我的做法是所有的源代码都要求是 utf-8,直接用 "" 普通字符串表达式,在 windows 底下,要求 msvc 使用 utf-8 编码:
: add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
: ...................
--
FROM 183.60.88.*