精华内容
下载资源
问答
  • VC6.0汉字乱码解决办法

    千次阅读 2014-06-04 11:04:35
    VC6.0汉字乱码解决办法  问题:  在VC中写一段汉字,然后将其复制到记事本上,会是乱码如:àúê·3é??2é?ˉ   在将记事本上的汉字复制到VC中的时候会出现一串问号。。。。。。。。。 解决办法: ...

    VC6.0汉字乱码解决办法  

    问题:

           在VC中写一段汉字,然后将其复制到记事本上,会是乱码如:àúê·3é??2é?ˉ 

           在将记事本上的汉字复制到VC中的时候会出现一串问号。。。。。。。。。

    解决办法:

    在复制汉字的时候一定要保证是在中文输入的情况下,就正常了。

    原因:字符编码不一样,就像网页中的 utf-8  和 gbk。

     
    转载自网络,找了好久,一直找不到解决办法,今天找到了,就转载一下
    展开全文
  • 英文版XP VC控件汉字乱码

    千次阅读 2008-12-31 21:38:00
    解决方案:将*.rc文件中的#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)#ifdef _WIN32LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US#pragma code_page(1252) #endif //_WIN32改为#if !...

    解决方案:

    将*.rc文件中的

    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
    #ifdef _WIN32

    LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
    #pragma code_page(1252) 
    #endif //_WIN32

    改为

    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
    #ifdef _WIN32
    LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
    #pragma code_page(936) 
    #endif //_WIN32

    展开全文
  • MFC的CStdioFile输出和读取汉字乱码

    千次阅读 2013-10-16 09:18:59
    转自:http://www.myexception.cn/vc-mfc/1244815.html ...MFC的CStdioFile::WritString和ReadString输出和读取汉字就是一大坑爹玩意UNICODE 都是UNICODE环境 所先是CStdioFile::WritString不能输

     

    转自:http://www.myexception.cn/vc-mfc/1244815.html

     

    setlocale( LC_CTYPE, "chs" );  其对应的头文件为 <locale.h>

     

    MFC的CStdioFile::WritString和ReadString输出和读取汉字就是一大坑爹玩意UNICODE
    都是UNICODE环境
    所先是CStdioFile::WritString不能输汉字到文件中。
    自己编辑好UNICODE中文文本后,
    用CStdioFile::ReadString要么读不出来,要么是乱码。

    char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) ); 
    setlocale( LC_CTYPE,"chs");

    用了下面的代码还是无用
    char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) ); 
    setlocale( LC_CTYPE,"chs");

    setlocale( LC_CTYPE, old_locale ); //还原语言区域的设置
    free( old_locale );//还原区域设定 


    ------解决方案--------------------------------------------------------
    这是在unicode编程环境下读写文本,不是读写UNICODE格式的文本


        char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
        setlocale( LC_CTYPE, "chs" );//设定<ctpye.h>中字符处理方式

        while (WatchTxt.ReadString(strTemp))
        {
      `    。。。。
        }
        setlocale( LC_CTYPE, old_locale );
        free( old_locale );//还原区域设定

    ------解决方案--------------------------------------------------------
    		setlocale(0,"chs");
    
    		{
    
    			CStdioFile file( L"temp.txt" , CFile::modeCreate
    ------解决方案--------------------------------------------------------
    CFile::modeReadWrite );
    
    			file.WriteString( L"test 测试 " );
    
    			file.Close();
    
    		}
    
    		{
    
    			CStdioFile file( L"temp.txt" , CFile::modeReadWrite );
    
    			CString str;
    
    			file.ReadString(str);
    
    			file.Close();
    
    			::MessageBoxW(0,str,0,0);
    
    		}

    可以正常写入读取。。。
    ------解决方案--------------------------------------------------------
    要是读取unicode编码的文件的话
    打开时指定unicode编码即可,不过老版本的VS可能不支持,VS2008肯定没问题的。
    		CStdioFile file( fopen( "temp.txt", "r,ccs=UNICODE" ) );
    
    		CString str;
    
    		file.ReadString(str);
    
    		file.Close();
    
    		::MessageBoxW(0,str,0,0);
    
    

    ------解决方案--------------------------------------------------------
    除了setlocale
    BOM(Byte Order Mark)的问题也要解决的
    用这个试试吧
    CStdioFileEx
    http://www.codeproject.com/KB/files/stdiofileex.aspx
    展开全文
  • 学习】VS读取文件或写入文件时出现中文乱码问题 (2013-07-29 16:19:02)转载▼ 标签: 中文乱码 vs读取文件 写入文件 gb2312 默认编码 分类: 学富五车 ...使用记事本打开发现没有乱码现象,但是在VC里显示是
    学习】VS读取文件或写入文件时出现中文乱码问题 
    最近我发现我从文本文档中读取文件处理后再存入新文本文档后,只要是有中文的都显示乱码了~~当我把中文去掉后一切又都正常了,而在我处理过程中,很确定没有对中文进行处理。使用记事本打开发现没有乱码现象,但是在VC里显示是乱码,而且原来可以运行的也不能运行了,去掉中文后一切正常。
    参考网上的一些资料发现:
    操作系统默认编码是大多是ANSI(具体有不同),txt记事本打开文件时默认以系统默认的缺省编码方式打开(中文为GB2312),所以在记事本中打开时显示正常。而VS打开以及新建文件使用的是UTF8编码。所以会出现乱码错误。解决办法很简单:
    出现中文时,打开文件请使用:
    StreamReader read = new StreamReader(filename, System.Text.Encoding("GB2312"));

    String strContent=File.ReadAllText(filename,Encoding.GetEncoding("GB2312"));
    新建文件请使用:
    StreamWriter writer= new StreamWriter(filePath , false, Encoding.GetEncoding("GB2312"));
    writer.Write(content);//content为要写入的内容
    sw.Flush();
    sw.Close();


    亲测可用,问题解决! 网上找了弄了好久才解决掉。


    切记:打开时要用,写入是也要用!莫忘写入时编码!!我就坑在这个上了~莫用UTF8~~没用的……


     
    一下是我找到的网上的一些有关博文,想了解深入可以参考一下!
    最近有些朋友总是发现读取文件的时候发现乱码,不过用工具打开一看却是好的。
    其实这个问题的罪魁祸首是VS.net的编辑器,在MS下一般文件编辑器(Notepad,ultraedit)都是使用操作系统缺省编码(不同的系统会不同),如在我的英文xp是ANSI,vs.net新建文件的保存以后使用的编码却是UTF8,大概是为了和StreamReader和StreamWriter打开文件缺省得encoding为UTF8保证一致的缘故吧。
      为什么我们用工具打开却是好的,那是因为MS的所有编辑器都会根据文件中使用的编码自动使用对应的编码打开文件。
      所以总结出来解决问题,首先要看得是这个文件的创建工具(注意是创建程序,而不是文件的缺省打开工具)是哪个在决定使用对应的Encoding打开文件,而不是盲目的尝试各种编码
     
    针对一些windows工具创建的文件可以使用
    StreamReader read = new StreamReader(filename, System.Text.Encoding.Default);
     
    vs.net创建的文件可以使用
    StreamReader read = new StreamReader(filename);
     
    对于一些网络流如httpresponse的字节流,可以使用其他GB2312
     
    来自
     http://www.alixixi.com/Dev/Web/ASPNET/aspnet3/2007/200702068636.html
     
    不少朋友遇到用System.IO.StreamReader读取包含汉字的txt文件时,经常会读出乱码(StreamWriater写文本文件也有类似的问题),原因很简单,就是文件的编码(encoding)和StreamReader/Writer的encoding不对应。
        为了解决这个问题,我写了一个类,来取得一个文本文件的encoding,这样我们就可以创建对应的
    StreamReader和StreamWriter来读写,保证不会出现乱码现象。其实原理很简单,文本编辑器(比如XP自带的记事
    本)在生成文本文件时,如果编码格式和系统默认的编码(中文系统下默认为GB2312)不一致时,会在txt文件开头
    部分添加特定的“编码字节序标识(Encoding Bit Order Madk,简写为BOM)”,类似PE格式的"MZ"文件头。这样
    它在读取时就可以根据这个BOM来确定该文本文件生成时所使用的Encoding。这个BOM我们用记事本等程序打开默认
    是看不到的,但是用stream按字节读取时是可以读到的。我的这个TxtFileEncoding类就是根据这个BOM“文件头”
    来确定txt文件生成时用到的编码的。
    //  作者:袁晓辉
    //  2005-8-8
    // // // // // //
    using System;
    using System.Text;
    using System.IO;
    namespace Farproc.Text
    {
        ///
        /// 用于取得一个文本文件的编码方式(Encoding)。
        ///
        public class TxtFileEncoding
        {
            public TxtFileEncoding()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
            ///
            /// 取得一个文本文件的编码方式。如果无法在文件头部找到有效的前导符,Encoding.Default将被返回。
            ///
            /// 文件名。
            ///
            public static Encoding GetEncoding(string fileName)
            {
                return GetEncoding(fileName, Encoding.Default);
            }
            ///
            /// 取得一个文本文件流的编码方式。
            ///
            /// 文本文件流。
            ///
            public static Encoding GetEncoding(FileStream stream)
            {
                return GetEncoding(stream, Encoding.Default);
            }
            ///
            /// 取得一个文本文件的编码方式。
            ///
            /// 文件名。
            /// 默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。
            ///
            public static Encoding GetEncoding(string fileName, Encoding defaultEncoding)
            {
                FileStream fs = new FileStream(fileName, FileMode.Open);
                Encoding targetEncoding = GetEncoding(fs, defaultEncoding);
                fs.Close();
                return targetEncoding;
            }
            ///
            /// 取得一个文本文件流的编码方式。
            ///
            /// 文本文件流。
            /// 默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。
            ///
            public static Encoding GetEncoding(FileStream stream, Encoding defaultEncoding)
            {
                Encoding targetEncoding = defaultEncoding;
                if(stream != null && stream.Length >= 2)
                {
                    //保存文件流的前4个字节
                    byte byte1 = 0;
                    byte byte2 = 0;
                    byte byte3 = 0;
                    byte byte4 = 0;
                    //保存当前Seek位置
                    long origPos = stream.Seek(0, SeekOrigin.Begin);
                    stream.Seek(0, SeekOrigin.Begin);
                   
                    int nByte = stream.ReadByte();
                    byte1 = Convert.ToByte(nByte);
                    byte2 = Convert.ToByte(stream.ReadByte());
                    if(stream.Length >= 3)
                    {
                        byte3 = Convert.ToByte(stream.ReadByte());
                    }
                    if(stream.Length >= 4)
                    {
                        byte4 = Convert.ToByte(stream.ReadByte());
                    }
                    //根据文件流的前4个字节判断Encoding
                    //Unicode {0xFF, 0xFE};
                    //BE-Unicode {0xFE, 0xFF};
                    //UTF8 = {0xEF, 0xBB, 0xBF};
                    if(byte1 == 0xFE && byte2 == 0xFF)//UnicodeBe
                    {
                        targetEncoding = Encoding.BigEndianUnicode;
                    }
                    if(byte1 == 0xFF && byte2 == 0xFE && byte3 != 0xFF)//Unicode
                    {
                        targetEncoding = Encoding.Unicode;
                    }
                    if(byte1 == 0xEF && byte2 == 0xBB && byte3 == 0xBF)//UTF8
                    {
                        targetEncoding = Encoding.UTF8;
                    }
                    //恢复Seek位置      
                    stream.Seek(origPos, SeekOrigin.Begin);
                }
                return targetEncoding;
            }
        }
    }
     
     
     
        由于在GB2312和UTF7编码都没有BOM,所以需要指定一个默认的Encoding,在找不到合法的BOM时,将返回这个
    Encoding。有谁知道如何区分GB2312和UTF7编码txt文件的方法,也请告诉我。
        由于只是static方法,所以不用new,直接通过类名调用方法,使用起来也很简单。
    using System;
    using Farproc.Text;
    using System.Text;
    using System.IO;
    namespace ConsoleApplication1
    {
        ///
        /// Class1 的摘要说明。
        ///
        class Class1
        {
            ///
            /// 应用程序的主入口点。
            ///
            [STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                string fileName = @"e:\a.txt";
                //生成一个big endian Unicode编码格式的文本文件
                StreamWriter sw = new StreamWriter(fileName, false, Encoding.BigEndianUnicode);//你可以试试其他编码,比如Encoding.GetEncoding("GB2312")或UTF8
                sw.Write("这是一个String");
                sw.Close();
     
     
     
                //读取
                Encoding fileEncoding = TxtFileEncoding.GetEncoding(fileName, Encoding.GetEncoding("GB2312"));//取得这txt文件的编码
                Console.WriteLine("这个文本文件的编码为:" + fileEncoding.EncodingName);
                StreamReader sr = new StreamReader(fileName, fileEncoding);//用该编码创建StreamReader
     
     
     
                //用下面的方法虽然可以让系统自动判断文本文件的编码格式,但是我们无法取得该文本文件的编码
                //sr.CurrentEncoding永远为 Unicode(UTF-8)
                //StreamReader sr = new StreamReader(fileName, true);
                //Console.WriteLine("这个文本文件的编码为:" + sr.CurrentEncoding.EncodingName);
                Console.WriteLine("这个文本文件的内容为:" + sr.ReadToEnd());
                sr.Close();
                Console.ReadLine();
            }
        }
    }
     
     
     
        .NET下的string永远是Unicode的,所以只能判断txt文件的Encoding。对于byte[],只有自己知道它的
    Encoding才能转换为string 转换为其他编码的byte[],一个例外是把整个txt文件通过stream读入byte[]后也可以根据它的前几个字节判断
    Encoding,对于片断,我们就无能为力了:)
     
    来自http://www.lob.cn/jq/aspjq/6885.shtml
     
    在使用C#对文本文件读取的时候,如果其中包含了中文,经常会出现乱码。一般解决是在StreamReader加一个编码,我使用的是Encoding.UTF8,一般情况下使用这个参数就可以。但是,在这次我使用UTF8却无效。而且使用,unicode和UTF32都会使用StreamReader的EndOfStream在读取一行之后,就会变成true。我想原因可能是使用这种编码没有正确读取出换行符,使读取一次之后就到达了文件末尾。


    直到后来,看到一片资料,使用Encoding.GetEncoding("gb2312"),就解决了乱码问题。看来需要百度一下gb2312和UTF8的区别。


     


    附:原文:


    在对文本文件进行读取的时候,如果其中包含了中文,可能就会有乱码的出现,解决方法很简单。只需要在读取出来的时候StreamReader加一个编码就可以了。代码如下:


    using System.IO;


    StreamReader sr = new StreamReader(fileName,Encoding.GetEncoding("gb2312"));//fileName为文件的绝对路径


     


    由于C#操作文件的内容网上有很多,我就不详细说明了,下面给出两个函数,分别用来读取和写入文本文件,记得引用System.IO;


    ///


            /// 功能:


            /// 在指定的文件filename处生成该文件,并且以内容content来填充。


            ///


            /// 文件名


            /// 文件内容


            public static void CreateFile(string filename,string content)


            {


                try


                {


    //这个构造函数的具体含义:在指定的文件fileName处,第二个参数表示是否将内容追加到文件。如果文件存在,并且第二个参数append为false,那么将改写文件,如果append为true,则在末尾加入内容,如果文件不存在,则创建该文件,并且填充内容。 所以就算文件不存在,我们这样创建文本文件也是没有问题的。       


    StreamWriter sw = new StreamWriter(filename,false,Encoding.GetEncoding("gb2312"));


                   sw.Write(content);


                   sw.Flush();


                   sw.Close();


                }


                catch(IOException ioe)


                {


                   throw ioe;


                }


            }


     


    ///


            /// 功能:


            /// 在文件的最前面加入内容content


            ///


            /// 文件名


            /// 插入的内容


            public static void InsertFile(string filename,string content)


            {


                try


                {


                   StreamReader sr = new StreamReader(filename,Encoding.GetEncoding("gb2312"));


                   content += sr.ReadToEnd();


                    sr.Close();


                    CreateFile(filename,content);


     


               }


                catch(IOException ioe)


                {


                   throw ioe;


                }


            }


            ///


            /// 功能:


            /// 在文件末尾增加指定内容content


            ///


            /// 文件名


            /// 新增内容


            public static void AppendFile(string filename,string content)


            {


                try


                {


                   string filecontent = "";


                   StreamReader sr = new StreamReader(filename,Encoding.GetEncoding("gb2312"));


                   filecontent += sr.ReadToEnd() + content;//如


     
    来自 http://www.2cto.com/kf/201007/52582.html
    展开全文
  • 当你运行某些中文软件时,假如菜单等显示界面上出现乱码,你用上面的方法却不能消除,那就可能是软件的中文链接库被英文链接库覆盖引起的,这类乱码经常发生在用微软开发工具(例如VB、VC)开发的中文软件上。...
  • 我遇到这个问题时是我的代码是在emacs中编写调试的,因为交作业的时候需要VC6编译环境,所以当把代码从emacs中拷贝到VC6中时,所有注释中的汉字都变成问号了,在网上搜索到这个方法,确实能解决问题。
  • vc2008中建立基于mfc的project。在向导的Application type页面中如果在resource language选项中选择"英语(美国)"(图一),那么在project中的设置菜单或者控件(如button)上的汉字会最终显示为"?"。有几个汉字就有...
  • VC 6.0 连接mysql 乱码处理

    千次阅读 2014-07-07 10:57:14
    在 mysql_set_character_set(myData,"gb2312"); //这个是用在linux 下的,  VC6.0下用这个: ret = mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gb2312");//来保证你字码, 要加重记住.... 汉字就是乱码
  • vc2008中建立基于mfc的project。在向导的Application type页面中如果在resource language选项中选择“英语(美国)”(图一),那么在project中的设置菜单或者控件(如button)上的汉字会最终显示为“?”。有几个汉字...
  • python3 密码生成器用random模块实现按照要求生成一定个数和一定位数的密码: #Author by Andy #_*_ coding:utf-8 _...quot&semi;BestCoder Cup&quot&semi; Champion这场比赛我没有参加,不过就算参加了也...
  • 前段时间使用vc+mysql做东西,中途发现一插入汉字的话就出现乱码,网上找了很多资料,像在连接字符串的地方设置字符集,发现都没有解决问题,后来研究了一下mysql字符集的结构,终于解决问题。 MySQL服务端不加任何...
  • 由于项目中用到了JSON数据结构,客户端采用VC编写,服务端数据接口采用PHP编写,遇到了JSON中文Unicode编码后,客户端出现了乱码的情形。 网上有一个方法比较好用,就是修改json_reader.cpp中的codePointToUTF8函数...
  • VC6.0 UCS2(unicode) 与 GBK(gb2312) UTF(utf-8)格式互转 #include #include #include "windows.h" // 把UTF-8转换成Unicode void UTF_8ToUnicode(WCHAR* pOut,char *pText) { char* uchar = (char *)pOut;...
  • vc2008中建立基于mfc的project。在向导的Application type页面中如果在resource language选项中选择“英语(美国)”(图一),那么在project中的设置菜单或者控件(如button)上的汉字会最终显示为“?”。有几个汉字...
  • myFile.Open(_T("UserName.txt"),CFile::modeRead); // myFile.SeekToBegin(); myFile.ReadString(m_strtotxt_1); myFile.Close(); m_username = m_strtotxt_1; // CEdit *m_Edit; // m_Edit = (CEdit *)...
  • VC----实现汉字简繁转换

    千次阅读 2012-08-10 10:53:06
    繁体为什么分为乱码和非乱码的。现在总算搞清楚了 看起来是乱码那种叫Big5,非乱码的叫GBK繁体 ...GB2312字集是简体字集,全称为GB2312(80)字集,共包括国标简体汉字6763个。  BIG5字集是台湾繁
  • 去年用vc给客户开发了一套基于pdf文档的数字图书馆,界面显示都是古汉语,要求支持unicode5.0标准,在页面上能显示7万多汉字,包括四字节汉字,终于在费了九牛二虎之力后在中文操作系统下没有任何问题。 今年客户要...
  • 调试-》属性页-》字符集,改成-未设置。...一个汉字2个字节,符号与字母1个字节,这样写入excel就不会乱码。 void CDataView::OnBnClickedBtnExporttoexcel() { CTime time = CTime::GetCurre...
  • QT 中文乱码

    2020-01-29 12:28:49
    在QT中,输出中文出现乱码,比如使用QString或者tr()均出现乱码。 微软VC编译器源代码使用GB2312编码进行保存。" 我是汉字 " 是C语言中的字符串,它是char型的窄字符串。保存成带BOM的UTF-8,用微软cl编译器时,...
  • qt中中文乱码,使用QString或者tr()均出现乱码。 微软VC编译器源代码使用GB2312编码进行保存。"我是汉字" 是C语言中的字符串,它是char型的窄字符串。保存成带BOM的UTF-8,用微软cl编译器时,汉字本身是...
  • 微软VC编译器源代码使用GB2312编码进行保存。...由于二者不同,所以对于汉字来说,需要经过转换,否则出现乱码。 QString的成员函数知道按照何种编码来处理字符串。 fromLocal8Bit() 可以把中文转为Unic
  • symbian 模拟器乱码

    2012-03-22 16:33:24
    其中GBK是GB2312的超集,也就是涵盖了GB2312编码的所有内容,UTF-8是Unicode的在网络传输中的一种编码格式,如果我们使用vc做为开发工具,在win下面进行开发,那么win的默认字符集是 GBK的,而symbian系统默认的编码...
  • VC文件操作

    2011-03-01 10:57:00
    <br />第一个,先...使用这种方法时,可能会出现一种错误情况,就是你使用WriteString(str)方法时,如果输出的是汉字时,可能会变成乱码.解决办法为: CStdioFile.WriteString无法处理中文 CStdioFile 的bug
  • VC 编码问题

    2011-09-27 09:46:00
    汉字文件名问题解决的一个途径 UniCode 下CString 转 char*,利用WideCharToMultiByte进行转换,中文乱码的解决方案 UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

vc汉字乱码