VC2017中,字符串的默认编码格式是什么?

srhouyu 2017-07-29 12:40:30
1.一个wchar_t字符串,例如L"这是一个abc字符串",是否是UTF-16格式?

2.而char字符串,例如"这是一个abc字符串",是否是GBK格式?

在工程的设置里面,“使用UNICODE字符集”或者“使用多字节字符集”也并没有直接说明到底是哪种编码。

3.听说Windows一般情况下并不默认使用UTF-8,那么以多字节字符集为例,是不是如果我用简体中文版Windows就是GBK,用日文版Windows就是JIS?有没有办法完全设置为UTF-8编码的代码文本,UTF-8编码的原生字符串?

若C++DLL导出函数的一个参数是const char*,C#对应参数是string,那么C++被传入的似乎是一个UTF-8编码的char字符串。若是把这字符串与VC原生的字符串混用就很尴尬。而且,若是我要给C#回传字符串,似乎也得是UTF8才行。

4.那么,VC有什么好办法处理UTF8字符串与原生字符串的相互转换呢?
...全文
722 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
战在春秋 2017-07-29
  • 打赏
  • 举报
回复
你的感觉是对的^_^
战在春秋 2017-07-29
  • 打赏
  • 举报
回复
引用
VC里面的两类字符串字面量是否分别以UTF-16编码存储在wchar_t类型数组里,或是以GBK编码存储在char类型数组里
msdn上有一个对此问题的回复,希望对你有帮助: https://social.msdn.microsoft.com/Forums/vstudio/en-US/af42789b-0279-4ab4-92c6-3480fc1983b6/is-unicode-in-c-actually-utf16-is-wchart-type-only-compatible-with-utf16-can-char-type?forum=vclanguage
srhouyu 2017-07-29
  • 打赏
  • 举报
回复
还有,我的意思是,VC看到"这是一个abc字符串"就自动理解为用char类型存储的GBK编码字符串,看到
引用 4 楼 fight_in_dl 的回复:
引用
不同在哪里
UNICODE 与 UTF-16 并不能完全划等号。 可以参考: http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html 要搞清这个问题,最先要解决的是分清 字符集字符编码 强烈推荐:http://cenalulu.github.io/linux/character-encoding/ 至于wchar_t的确切类型,和编译器的实现相关,可以查msdn。
字符集和编码的区别我是知道的。前者是每个字符的唯一编号,后者是编号的储存方式。 我在顶楼主要问的就是VC的实现,即VC里面的两类字符串字面量是否分别以UTF-16编码存储在wchar_t类型数组里,或是以GBK编码存储在char类型数组里。我的感觉是这样。 VC里面没有出现UTF-16这样的具体编码,仅仅用UNICODE来代替。虽然如此,但是你在二楼所说的“UNICODE编码”应该就是指的“UTF-16编码”吧。因为若不考虑Endian,16位的Unicode编码应该只有UTF-16一种。
战在春秋 2017-07-29
  • 打赏
  • 举报
回复
引用
不同在哪里
UNICODE 与 UTF-16 并不能完全划等号。 可以参考: http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html 要搞清这个问题,最先要解决的是分清 字符集字符编码 强烈推荐:http://cenalulu.github.io/linux/character-encoding/ 至于wchar_t的确切类型,和编译器的实现相关,可以查msdn。
srhouyu 2017-07-29
  • 打赏
  • 举报
回复
引用 2 楼 ccssddnn218 的回复:
回答你的几点: 1.一个wchar_t字符串,例如L"这是一个abc字符串",是否是UTF-16格式? 不是。是UNICODE。 2.而char字符串,例如"这是一个abc字符串",是否是GBK格式?是。也是ASCII 在工程的设置里面,“使用UNICODE字符集”或者“使用多字节字符集”也并没有直接说明到底是哪种编码。UNICODE字符集就是UNICODE编码,多字符集就是GBK编码(或ASCI) 3.听说Windows一般情况下并不默认使用UTF-8,那么以多字节字符集为例,是不是如果我用简体中文版Windows就是GBK,用日文版Windows就是JIS? 有没有办法完全设置为UTF-8编码的代码文本,UTF-8编码的原生字符串?暂时我没有办法 若C++DLL导出函数的一个参数是const char*,C#对应参数是string,那么C++被传入的似乎是一个UTF-8编码的char字符串。若是把这字符串与VC原生的字符串混用就很尴尬。而且,若是我要给C#回传字符串,似乎也得是UTF8才行。 4.那么,VC有什么好办法处理UTF8字符串与原生字符串的相互转换呢?使用编码转换函数,例如MultiByteToWideChar
“UNICODE编码”这个词,我深刻怀疑,在VC上,它就是特指用wchar_t类型存储的UTF-16编码。 如果“UNICODE编码”与UTF-16是两种不同的编码,那么它们不同在哪里?
Really_want 2017-07-29
  • 打赏
  • 举报
回复
回答你的几点: 1.一个wchar_t字符串,例如L"这是一个abc字符串",是否是UTF-16格式? 不是。是UNICODE。 2.而char字符串,例如"这是一个abc字符串",是否是GBK格式?是。也是ASCII 在工程的设置里面,“使用UNICODE字符集”或者“使用多字节字符集”也并没有直接说明到底是哪种编码。UNICODE字符集就是UNICODE编码,多字符集就是GBK编码(或ASCI) 3.听说Windows一般情况下并不默认使用UTF-8,那么以多字节字符集为例,是不是如果我用简体中文版Windows就是GBK,用日文版Windows就是JIS? 有没有办法完全设置为UTF-8编码的代码文本,UTF-8编码的原生字符串?暂时我没有办法 若C++DLL导出函数的一个参数是const char*,C#对应参数是string,那么C++被传入的似乎是一个UTF-8编码的char字符串。若是把这字符串与VC原生的字符串混用就很尴尬。而且,若是我要给C#回传字符串,似乎也得是UTF8才行。 4.那么,VC有什么好办法处理UTF8字符串与原生字符串的相互转换呢?使用编码转换函数,例如MultiByteToWideChar
Really_want 2017-07-29
  • 打赏
  • 举报
回复
实际上wchar_t,char和各种编码根本就不能混为一谈。不过你要这么理解,把他们联系在一起的话,也可以:

64,849

社区成员

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

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