当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 新手求教:C++的中文输出问题
帖子发表于 : 2007-06-09 9:26 

注册: 2007-04-20 13:05
帖子: 62
送出感谢: 0 次
接收感谢: 0 次
我通过读取一个文件的内容,然后在终端显示,可是在终端显示的中文全是乱码. 我把内容重新写到另外一个文件中,又是正常的.

请问一下,就上面的情况,怎么样能在终端显示中文呢?在输出的时候做什么处理呢?

谢谢.


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-06-10 10:52 

注册: 2007-04-20 13:05
帖子: 62
送出感谢: 0 次
接收感谢: 0 次
怎么没有人帮忙呀,急呀,一天了.


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-06-10 11:55 
头像

注册: 2007-04-03 9:52
帖子: 353
送出感谢: 0 次
接收感谢: 0 次
我猜,主要是大多数人没怎么用中文开发,有2个问题想问你

1. 终端的charset是什么?
2. 输入/输出文件的编码是什么?

我这里终端是utf-8, 我用utf-8的文件做了一下测试,可以正常显示
测试代码如下

代码:
#include<iostream>
#include<string>
#include<fstream>

using namespace std;

int main(int argc, char ** argv)
{
    ifstream in("chinese");

    if (!in)
    {
        cerr << "open file faild!" << endl;
        return -1;
    }

    string temp;

    while (getline(in, temp))
    {
        cout << temp << endl;
    }
   
    return 0;
}


测试用的 chinese 文件中的内容如下,字符集是UTF-8
引用:
UTF8中文测试
下面这句话无疑是句费话
上面这名话无疑是正确的


_________________
TODO LIST:
1.valgrind:
2.gcov:
3.cppuint:未在Linux中使用
4.PostgreSQL:unixODBC
5.Doxygen:UTF8 中文问题,生成LaTex文档问题
6.LaTex:明确安装问题,UTF8 中文字体问题


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-06-10 12:09 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
multibyte记得用wstring或wchar。
或者直接用wx之类的已经封装好了的也行。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-06-10 13:30 
头像

注册: 2007-04-03 9:52
帖子: 353
送出感谢: 0 次
接收感谢: 0 次
xiechy 写道:
multibyte记得用wstring或wchar。
或者直接用wx之类的已经封装好了的也行。


我也知道一般宽字符应该用wchar_t

但是在utf-8的locale 中 输入 wchar_t 的中文字符比较困难,
例如:
wstring ws;
wcin >> ws;

输入 "中文"两个字,再用 wcout 输出 会变成乱码

而用 string 则不会有这个问题,只是因为utf-8的原因,一个中文字可能是 2, 3,4 字节的长度,
string 的长度不等于汉字的长度


_________________
TODO LIST:
1.valgrind:
2.gcov:
3.cppuint:未在Linux中使用
4.PostgreSQL:unixODBC
5.Doxygen:UTF8 中文问题,生成LaTex文档问题
6.LaTex:明确安装问题,UTF8 中文字体问题


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-06-10 13:36 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
setlocale吧~如果是这样~
我只写过wxString的东东,底层封装起来了之后就没啥了~如果国际化重要的话~我一般是不大考虑国际化的~


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-06-10 13:58 

注册: 2007-04-20 13:05
帖子: 62
送出感谢: 0 次
接收感谢: 0 次
多谢了楼上各位了.我是C++新手,写了三年的C#,实现厌恶了.现在想学学C++,以前在学校学过一点,不过都忘得差不多了.请多位大侠多多指教.

上面的问题中,读取的文件是二进制文件。我不知道如何在C++中进行字符的编码转换?


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-06-11 9:41 
头像

注册: 2006-08-13 16:06
帖子: 76
送出感谢: 0 次
接收感谢: 0 次
目前中文的编码有不少,写汉字处理的程序一定要考虑编码问题。现在主流的编码有(GB2312, GBK, GB18030, UTF-8等),有一个开源的库我们可以用它轻松的实现编码间的相互转换:libiconv(http://www.gnu.org/software/libiconv/),具体怎么用,请研究手册吧!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Yahoo [Bot] 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译