类型转换问题(字符编码?)(SDL_ttf显示汉字)

zhuhuizhan 2011-02-14 11:35:44
SDL_ttf扩展库问题:
在网上找了快两天了,一直没解决:
如果直接在代码中写入汉字:

std::string text_="汉字一二:";
message=TTF_RenderUTF8_Solid(font,text_.c_str(),textColor);
SDL_BlitSurface(message,NULL,screen,NULL);

则程序运行时"汉字一二"可以正常显示.



而当std::string text是从文件中读取时:

std::ifstream fin("file.txt");
std::string text;
fin>>text;
message=TTF_RenderUTF8_Solid(font,text.c_str(),textColor);
SDL_BlitSurface(message,NULL,screen,NULL);

却不能显示file.txt文件中的汉字,我将file.txt的编码方式从ANSI,UNICODE,UTF8都试过了,当使用ANSI时,可以正常显示文件中的英文字母数字等,不能显示汉字,当使用另外两种编码时,直接什么都显示不了,连英文都显示不了.


如果用另一个函数:

std::ifstream fin("file.txt");
std::string text;
fin>>text;
message=TTF_RenderUNICODE_Solid(font,text.c_str(),textColor);
SDL_BlitSurface(message,NULL,screen,NULL);

则编译时会提示
77 V:\project\Untitled1.cpp cannot convert `const char*' to `const Uint16*' for argument `2' to `SDL_Surface* TTF_RenderUNICODE_Solid(TTF_Font*, const Uint16*, SDL_Color)'


这种情况应该如何解决呢?
附:
SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg);
SDL_Surface *TTF_RenderUNICODE_Solid(TTF_Font *font, const Uint16 *text, SDL_Color fg);
SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg);



...全文
350 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuhuizhan 2011-03-11
  • 打赏
  • 举报
回复
这问题终于“解决”了,现在说一下,我是用了个非常笨的方法。最终,我偶然发现了一个现象:当用std::ifstream fin读取ANSI编码的文本文件内容到std::string中时,再把std::string传给TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg)则TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg)用来显示后将是乱码,而UTF-8文件则好像直接连读就不读!
而如果把文本文件存成UTF-8编码,然后手工把这个UTF-8文件的头三个字节去掉的话,那么再用std::ifstream的对象来读这个去掉了头三个字节的UTF-8文件,那么里面的内容全都可以正常显示了!我现在还是不太明白原因,只看到了现象。然后我写了个小程序把所有需要读取的文本文件都转成UTF-8编码的然后去掉头三个字节,于是问题以这种方式“解决”了……


哪位高人能够解释一下吗?难道ifstream默认是以二进制方式打开的?
zhuhuizhan 2011-02-16
  • 打赏
  • 举报
回复
不是因为我懒而不愿意自己查 ,
而是因为我不知道对这个问题该如何查起,

所以只好来提问了……
感谢……
zhuhuizhan 2011-02-16
  • 打赏
  • 举报
回复
应该做什么样的转换呢?
有没有具体的现成的库函数用呢?
dinjay 2011-02-14
  • 打赏
  • 举报
回复
unicode是2字节的,传char肯定不行,要做字符串转换。

64,282

社区成员

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

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