- 主题:请教UTF8和ANSI 转换问题,要抓狂了。
做转换之前需要调用 setlocale 设置 locale, 我的问题是,对于不同的语言的ANSI字符串,有没有一种万能locale设置可以把他们统统转成UTF8,以及再从UTF8转换成ansi字符串?
--
FROM 113.246.192.*
不存在ansi这个编码啊
utf8是unicode的一种编码,ansi是unicode的编码吗?
【 在 speedboy2998 的大作中提到: 】
: 做转换之前需要调用 setlocale 设置 locale, 我的问题是,对于不同的语言的ANSI字符串,有没有一种万能locale设置可以把他们统统转成UTF8,以及再从UTF8转换成ansi字符串?
--
FROM 123.112.21.*
看看这个,有两种方案,iconv那个不需要设置locale
https://blog.csdn.net/fengyelengfeng/article/details/49361715
--
修改:z16166 FROM 123.118.185.*
FROM 123.118.185.*
正解。 Windows 中文版上所谓 ansi 其实是 cp936 (也就是 gbk )。
【 在 Bernstein 的大作中提到: 】
: 不存在ansi这个编码啊
: utf8是unicode的一种编码,ansi是unicode的编码吗?
:
--
FROM 124.160.68.*
Windows 的本地化策略集到底怎么定的,中文版程序内码必须是 cp936 吗?
在 Codeblocks 中,MinGW 编译带中文字串的程序,好像必须在区域设置里勾选中文,
否则,无论怎么调整其他区域语言以及UTF-8本地策略集,都会出现乱码。
但在 MSYS2 终端中使用 g++,行为与 Linux 无异。
【 在 missmary (叶山) 的大作中提到: 】
: 正解。 Windows 中文版上所谓 ansi 其实是 cp936 (也就是 gbk )。
--
FROM 115.239.231.*
Windows 上的正确姿势是在程序内部始终使用 WCHAR(就是微软所谓的 "Unicode",实际上特指 UTF-16),只在输入输出时若有必要才进行编码转换
【 在 easior (潜行) 的大作中提到: 】
: Windows 的本地化策略集到底怎么定的,中文版程序内码必须是 cp936 吗?
: 在 Codeblocks 中,MinGW 编译带中文字串的程序,好像必须在区域设置里勾选中文,
: 否则,无论怎么调整其他区域语言以及UTF-8本地策略集,都会出现乱码。
: ...................
--
FROM 183.60.88.*
用Windows自己的工具应该没有问题,因为编码之类的它自己协调;
但是,用MinGW的思维好像不太好解释它的行为。
【 在 vonNeumann (劣币驱逐良币 | 少灌水) 的大作中提到: 】
: Windows 上的正确姿势是在程序内部始终使用 WCHAR(就是微软所谓的 "Unicode",实际上特指 UTF-16),只在输入输出时若有必要才进行编码转换
--
FROM 115.239.231.*
windows上两个API即可解君愁,任何别的都是绕路
WideCharToMultiByte,MultiByteToWideChar
【 在 easior 的大作中提到: 】
: Windows 的本地化策略集到底怎么定的,中文版程序内码必须是 cp936 吗?
: 在 Codeblocks 中,MinGW 编译带中文字串的程序,好像必须在区域设置里勾选中文,
: 否则,无论怎么调整其他区域语言以及UTF-8本地策略集,都会出现乱码。
: ...................
--
FROM 123.118.185.*
不是这么简单
1. cpp 源代码在中文平台是默认 GBK 编码的。几种编译器一般不做转化,直接存储到 exe 里面。
2. cpp11 以后有 u8"", u"" 这样的字符串形式,但是不普及。开源软件很多不用。
3. windows 的 IO 依赖于当前 locale,经常需要程序自己转化。
4. msvc 对 utf-8 的支持在各个版本间变来变去,直到现在还有人在用着 msvc 2008 呢。不容易兼容。
【 在 vonNeumann (劣币驱逐良币 | 少灌水) 的大作中提到: 】
: Windows 上的正确姿势是在程序内部始终使用 WCHAR(就是微软所谓的 "Unicode",实际上特指 UTF-16),只在输入输出时若有必要才进行编码转换
--
FROM 112.47.122.*
ansi对于中文的windows就是gbk吧?
【 在 Bernstein 的大作中提到: 】
: 不存在ansi这个编码啊
: utf8是unicode的一种编码,ansi是unicode的编码吗?
:
--
FROM 58.37.36.*