新手求教:C++的中文输出问题

软件和网站开发以及相关技术探讨
回复
shuhill
帖子: 62
注册时间: 2007-04-20 13:05

新手求教:C++的中文输出问题

#1

帖子 shuhill » 2007-06-09 9:26

我通过读取一个文件的内容,然后在终端显示,可是在终端显示的中文全是乱码. 我把内容重新写到另外一个文件中,又是正常的.

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

谢谢.
shuhill
帖子: 62
注册时间: 2007-04-20 13:05

#2

帖子 shuhill » 2007-06-10 10:52

怎么没有人帮忙呀,急呀,一天了.
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

#3

帖子 antonym55 » 2007-06-10 11:55

我猜,主要是大多数人没怎么用中文开发,有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中文测试
下面这句话无疑是句费话
上面这名话无疑是正确的
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#4

帖子 xiechy » 2007-06-10 12:09

multibyte记得用wstring或wchar。
或者直接用wx之类的已经封装好了的也行。
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

#5

帖子 antonym55 » 2007-06-10 13:30

xiechy 写了:multibyte记得用wstring或wchar。
或者直接用wx之类的已经封装好了的也行。
我也知道一般宽字符应该用wchar_t

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

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

而用 string 则不会有这个问题,只是因为utf-8的原因,一个中文字可能是 2, 3,4 字节的长度,
string 的长度不等于汉字的长度
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#6

帖子 xiechy » 2007-06-10 13:36

setlocale吧~如果是这样~
我只写过wxString的东东,底层封装起来了之后就没啥了~如果国际化重要的话~我一般是不大考虑国际化的~
shuhill
帖子: 62
注册时间: 2007-04-20 13:05

#7

帖子 shuhill » 2007-06-10 13:58

多谢了楼上各位了.我是C++新手,写了三年的C#,实现厌恶了.现在想学学C++,以前在学校学过一点,不过都忘得差不多了.请多位大侠多多指教.

上面的问题中,读取的文件是二进制文件。我不知道如何在C++中进行字符的编码转换?
头像
arthur
帖子: 76
注册时间: 2006-08-13 16:06

#8

帖子 arthur » 2007-06-11 9:41

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