Unicode码转换为中文

CaesireKin 2012-06-09 12:00:03
请各位大人们看仔细咯!
我希望在纯C++的环境下将Unicode码重新转换为字符,众所周知,在C++里用wchar_t类型的变量是可以直接输出某一个中文字符在Unicode中的十进制码的,但是现在我希望将这个十进制码重新翻译回中文,使用了很多种方法都没有效果,所以只好来这里请各位大人们帮忙出个主意,不使用WindowsAPI或是其他MFC什么的,有没有办法实现的?
我尝试着用这样一个表达式赋值:

wchar_t code = '\u4e0d';

在没有被单引号括起来的情况下,Vs2010能够识别出这个Unicode码,但是会提示未定义标识符。。。(必然结果),但是如果括起来了。。。这货的值就成了无敌的45755。。。。。Help~!!!!!
...全文
682 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2012-06-10
  • 打赏
  • 举报
回复
wcout.imbue(locale(""))相当于setlocale(LC_ALL,"");
这是在源代码直接赋值,和你说的不一样
wchar_t s = 0x4e0d;和wchar_t s = 19981;wchar_t s = L'\u4e0d';一样
CaesireKin 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]
C/C++ code

std::wcout.imbue( std::locale("") );

wchar_t s = 0x4e0d;

std::wcout << (int)s << std::endl << s << std::endl;




是要这效果么...
[/Quote]
正解,不过我想请教下,为什么你直接用16进制赋值就可以。。。我不行?wcout.imbue(locale(""))是什么意思?
CaesireKin 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 的回复:]
http://www.cplusplus.com/reference/clibrary/clocale/setlocale/
[/Quote]
谢谢,很有帮助
Lactoferrin 2012-06-10
  • 打赏
  • 举报
回复
http://www.cplusplus.com/reference/clibrary/clocale/setlocale/
CaesireKin 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]
wcout.imbue(locale(""))相当于setlocale(LC_ALL,"");
这是在源代码直接赋值,和你说的不一样
wchar_t s = 0x4e0d;和wchar_t s = 19981;wchar_t s = L'\u4e0d';一样
[/Quote]
能否解释下setlocale(LC_ALL,"")的作用?或是有相关的资料链接?
CaesireKin 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
wchar_t 在不同的平台实现不一样
Like Unix UTF-32
Windows UTF-16

而且你的工程设置 (字符集:多字节字符集 与 Unicode)有没有对应。
具体看看:http://blog.csdn.net/hikaliv/article/details/4570956
[/Quote]
我实在Windows平台的- -Linux没弄过,而且据我所知。。。。Vs2010只能在Windows上吧,工程设置的是使用Unicode
  • 打赏
  • 举报
回复
wchar_t 在不同的平台实现不一样
Like Unix UTF-32
Windows UTF-16

而且你的工程设置 (字符集:多字节字符集 与 Unicode)有没有对应。
具体看看:http://blog.csdn.net/hikaliv/article/details/4570956
qq120848369 2012-06-09
  • 打赏
  • 举报
回复
wchar_t code = L"\u4e0d";

首先需要用L修饰"",让它作为UNICODE,其次UNICODE都是"",没有''.
Eleven 2012-06-09
  • 打赏
  • 举报
回复
wchar_t code[] = L"\u4e0d";
MessageBoxW(code);
----------------
弹出来就是中文的"不"字
chensunhui 2012-06-09
  • 打赏
  • 举报
回复

std::wcout.imbue( std::locale("") );

wchar_t s = 0x4e0d;

std::wcout << (int)s << std::endl << s << std::endl;



是要这效果么...
CaesireKin 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
char a[]="19981";int i;
setlocale(LC_ALL,"");
sscanf(a,"%u",&i);
wprintf(L"%c",(wchar_t)i);
[/Quote]
有点复杂,不过可以好好利用一番,呵呵,谢谢你
Lactoferrin 2012-06-09
  • 打赏
  • 举报
回复
char a[]="19981";int i;
setlocale(LC_ALL,"");
sscanf(a,"%u",&i);
wprintf(L"%c",(wchar_t)i);
CaesireKin 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]
如果从文件输入用fwscanf
[/Quote]
wchar_t e = l"4e0d";
cout >> e;
这样形式的该怎么输出?
Lactoferrin 2012-06-09
  • 打赏
  • 举报
回复
如果从文件输入用fwscanf
Lactoferrin 2012-06-09
  • 打赏
  • 举报
回复
swscanf
Lactoferrin 2012-06-09
  • 打赏
  • 举报
回复
用sscanf
CaesireKin 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
你是不是要把19981这样的字符串变成不
[/Quote]
嗯,而且是输出到控制台,不好意思前面饶了那么大一个弯
Lactoferrin 2012-06-09
  • 打赏
  • 举报
回复
你是不是要把19981这样的字符串变成不
CaesireKin 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
什么叫Unicode的十进制码
[/Quote]
4e0d打错
CaesireKin 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
什么叫Unicode的十进制码
[/Quote]
就像是“不”
十进制是19981
十六进制是e40d
加载更多回复(8)

64,636

社区成员

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

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