打印中文字符问题(通过Unicode码打印)

Y.A.K.E 2011-12-01 05:46:07
出于某种原因,我不想在代码中直接使用
printf("中文");

现在我想到另外一个办法。那就是ASCII转换Unicode。

比如25105 29233 20320 我爱你.
我想这样。但是不行啊
#include <stdio.h>

int main()

{

printf("%s",25105);

return 0;

}



yane@yane-desktop:~/桌面$ gcc -Wall x.c -o x
x.c: 在函数‘main’中:
x.c:4:1: 警告: 格式 ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
yane@yane-desktop:~/桌面$ ./x
段错误


最终我想实现的目的,是定义一个转好的Unicode的整数常量数组。然后打印出来~~~。
给C代码(CPP不懂~)
...全文
629 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hondely 2011-12-04
  • 打赏
  • 举报
回复
hondely 2011-12-03
  • 打赏
  • 举报
回复
Y.A.K.E 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keiy 的回复:]

试试这个
C/C++ code

#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};
setlocale( LC_ALL, "" );
printf("%ls",s);
}
[/Quote]


我知道我这里为什么编译有问题了。少了头文件。
#include <stddef.h>
加了就可以编译。
赵4老师 2011-12-02
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。
qwer_boo 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keiy 的回复:]

试试这个
C/C++ code

#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};
setlocale( LC_ALL, "" );
printf("%ls",s);
}
[/Quote]++ 收藏
Y.A.K.E 2011-12-02
  • 打赏
  • 举报
回复
按六楼提供方法:printf("%c\n", 25105);
打印出来
一个奇怪的字符:外面一个方框,里面有4个数字,上面两个是0,下面两个是1
Y.A.K.E 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iblold 的回复:]

char p[] = {0xce, 0xd2, 0xb0, 0xae, 0xc4, 0xe3, 0};
printf("%s", p);

随便找个16进制编辑软件比如UE
把你要的文字拷贝进去,然后切换成16进制编辑
把16进制数值拷出来……
[/Quote]

这个打印出来有点问题,你用什么编译器可以?
yane@yane-desktop:~/桌面$ gcc -Wall x.c -o x
x.c:2:1: 警告: 返回类型默认为‘int’ [-Wreturn-type]
x.c: 在函数‘main’中:
x.c:6:1: 警告: 在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
yane@yane-desktop:~/桌面$ ./x
�Ұ��
Y.A.K.E 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keiy 的回复:]

试试这个
C/C++ code

#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};
setlocale( LC_ALL, "" );
printf("%ls",s);
}
[/Quote]

LINUX 调试有问题。
yane@yane-desktop:~$ cd /home/yane/桌面/
yane@yane-desktop:~/桌面$ gcc -Wall x.c -o x
x.c:3:1: 警告: 返回类型默认为‘int’ [-Wreturn-type]
x.c: 在函数‘main’中:
x.c:5:5: 错误: 未知的类型名‘wchar_t’
x.c:8:1: 警告: 在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
hondely 2011-12-02
  • 打赏
  • 举报
回复
汉字编码简明对照表里面 怎么理解?
Y.A.K.E 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hondely 的回复:]
#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};//怎么这里是这样的数字?……
[/Quote]

我的理解:
第一个是:Unicode编码,这个和MD5类似,都是加密???
第二个16进制:文本的16进制。
你另外一个是汉字的编码。我记得以前用的区位码输入法和这个类似。
hondely 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhao4zhong1 的回复:]

开始、运行、charmap
[/Quote]
赵大神 求助啊
那些东西怎么运行?????
还有上面的

#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};//怎么这里是这样的数字?
setlocale( LC_ALL, "" );
printf("%ls",s);
}


UE里面是这样的

char p[] = {0xce, 0xd2, 0xb0, 0xae, 0xc4, 0xe3, 0};

同样是 我爱你
在 汉字编码简明对照表里面 又是一个新的
http://www.knowsky.com/resource/gb2312tbm.htm#w
赵4老师 2011-12-02
  • 打赏
  • 举报
回复
开始、运行、charmap
hondely 2011-12-02
  • 打赏
  • 举报
回复
U+58F1 kAccountingNumeric 1
U+58F9 kAccountingNumeric 1
U+5F0C kAccountingNumeric 1
U+62FE kAccountingNumeric 10
U+4F70 kAccountingNumeric 100
U+964C kAccountingNumeric 100
U+4EDF kAccountingNumeric 1000
U+9621 kAccountingNumeric 1000
U+842C kAccountingNumeric 10000
U+5F0D kAccountingNumeric 2
U+5F10 kAccountingNumeric 2
U+8CAE kAccountingNumeric 2
U+8CB3 kAccountingNumeric 2
U+8D30 kAccountingNumeric 2
U+53C1 kAccountingNumeric 3
U+53C2 kAccountingNumeric 3
U+53C3 kAccountingNumeric 3
U+5F0E kAccountingNumeric 3
U+8086 kAccountingNumeric 4
U+4F0D kAccountingNumeric 5
U+9646 kAccountingNumeric 6
U+9678 kAccountingNumeric 6
U+67D2 kAccountingNumeric 7
U+6F06 kAccountingNumeric 7
U+634C kAccountingNumeric 8
U+7396 kAccountingNumeric 9
U+5159 kBigFive A259
U+515B kBigFive A25A
U+515E kBigFive A25B
U+515D kBigFive A25C
U+5161 kBigFive A25D
U+5163 kBigFive A25E
U+55E7 kBigFive A25F
U+74E9 kBigFive A260
U+7CCE kBigFive A261
U+5344 kBigFive A2CD
U+4E00 kBigFive A440
U+4E59 kBigFive A441
U+4E01 kBigFive A442
U+4E03 kBigFive A443
U+4E43 kBigFive A444
U+4E5D kBigFive A445
U+4E86 kBigFive A446
U+4E8C kBigFive A447
U+4EBA kBigFive A448
U+513F kBigFive A449
U+5165 kBigFive A44A
U+516B kBigFive A44B
U+51E0 kBigFive A44C
U+5200 kBigFive A44D
U+5201 kBigFive A44E
U+529B kBigFive A44F
U+5315 kBigFive A450
U+5341 kBigFive A451
U+535C kBigFive A452
U+53C8 kBigFive A453
U+4E09 kBigFive A454
U+4E0B kBigFive A455
U+4E08 kBigFive A456
U+4E0A kBigFive A457
U+4E2B kBigFive A458
U+4E38 kBigFive A459
U+51E1 kBigFive A45A
U+4E45 kBigFive A45B
U+4E48 kBigFive A45C
U+4E5F kBigFive A45D
U+4E5E kBigFive A45E
U+4E8E kBigFive A45F
U+4EA1
hondely 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iblold 的回复:]

char p[] = {0xce, 0xd2, 0xb0, 0xae, 0xc4, 0xe3, 0};
printf("%s", p);

随便找个16进制编辑软件比如UE
把你要的文字拷贝进去,然后切换成16进制编辑
把16进制数值拷出来……
[/Quote]
不错的方法
AndyZhang 2011-12-01
  • 打赏
  • 举报
回复
用c%会很好使
AnYidan 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keiy 的回复:]
试试这个

C/C++ code

#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};
setlocale( LC_ALL, "" );
printf("%ls",s);
}
[/Quote]

能看到 s 中的中文,但不能用printf() 输出,为何?

windows 7 (英文) + vs2010
qq120848369 2011-12-01
  • 打赏
  • 举报
回复
表示一直不太懂,keiy的可以运行。

iblold 2011-12-01
  • 打赏
  • 举报
回复
char p[] = {0xce, 0xd2, 0xb0, 0xae, 0xc4, 0xe3, 0};
printf("%s", p);

随便找个16进制编辑软件比如UE
把你要的文字拷贝进去,然后切换成16进制编辑
把16进制数值拷出来……
柯本 2011-12-01
  • 打赏
  • 举报
回复
试试这个

#include <stdio.h>
#include <locale.h>
main()
{
wchar_t s[]={ 25105, 29233 ,20320 ,0};
setlocale( LC_ALL, "" );
printf("%ls",s);
}
Y.A.K.E 2011-12-01
  • 打赏
  • 举报
回复
我想这个
printf("%s",25105);
中的25105 是一个地址?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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