我的程序在中文XP下运行,一切正常!!! 
但是到英文XP下运行,所有从access数据库中读出的中文都显示为???,如果不是从数据库中读,直接在代码中赋值或从ini文件中读取,则可以正常显示中文。 我的程序是VC2005(VC6也试过一样结果),采用ADO连接access,采用Unicode与非Unicode编程都不行,结果还是一样。 网上找了,有的说是字符集不同,但是不知如何设置access的字符集,听说默认是ANSI,不知道怎么改!!!很多人遇到同样的问题,但大部分都是网页方面的。 也有说不能直接在access中输入中文,,要用程序输入。我用如下代码: 
_variant_t GetVal; 
CString csTmp; 
while(!m_pRecordset->adoEOF) 

  GetVal = m_pRecordset->GetCollect(_T("Chinese"));//读取中文字段 
  m_pRecordset->PutCollect(_T("Chinese"), GetVal);//重新写回   //将PutCollect()换成用注释掉的代码:如下,中文系统正常,英文系统运行完下面代码后,整个库不能打开了 
  //库中还有别的很多张表,打开时提示格式错误 
  //csTmp = (LPCSTR)_b_str_(GetVal); 
  //csTmp+=_T("_New"); 
  //m_pRecordset->PutCollect(_T("Chinese"), )_b_str_(csTmp) ); 
  m_pRecordset->Update(); 
  m_pRecordset->MoveNext(); 
} 期待高手解决,问题很急!!!!!! 
解决后马上结贴

解决方案 »

  1.   

    A、消除链接Access文件的乱码 
      由于国外的免费主页空间容量大、而且支持ASP,于是许多朋友都使用这类主页空间,不过国外的ASP服务器一般不支持中文数据库,因此假如你的网页上有一个链接指向Access数据库文件,当你点击该链接打开Access文件时,文件中的中文内容就会显示乱码。
      为了消除这种乱码,你可以在链接数据的那个文件中加入下面的句子:
      <%@ language="vbscript" codepage="936" %>
      假如还不能消除乱码,请将你的数据库版本改为Access97,这样即可让国外ASP服务器支持中文数据库,从而消除乱码了。
    B、godaddy虚拟主机access数据库中文乱码的解决方法
    非程序生成的文字可以显示。但程序生成的文字就只有E文可以显示了。中文全是?号,这是数据库乱码引起的
    那么解决方法可以考虑如下:
    方法一:
    使用 Microsoft Access 2000 打开数据库,选择工具菜单>数据库实用工具>转换数据库>到早期 Access 数据库版本。OK!
    方法二:
    后来订阅了微软的新闻组,在微软的新闻组dotnet.framework.aspplus.general中发现有讨论这
    个问题的文章,方法为添加<%@ CODEPAGE = "936" %>到每一页的开头,有点类似于jsp中的
    <%@ page c%>
    赶紧测试了一下,果然OK!!!
    例子如下面所示:
    <%@ CODEPAGE = "936" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.ADO" %>
    <%@ Import Namespace="System.Globalization" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" c>
    </head>
    方法三:
    添加一个config.web文件到
    web目录下,
    建立一个文件config.web,内容如下,放在WEB目录下
    <configuration>
    <globalization
    requestencoding="utf-8"
    resp
    />
    </configuration> 
    C、ASP读取ACCESS数据库中文显乱码的问题!
    刚刚发现自己站点读取数据库时候出现乱码..就在网上找了点原因解决方法:
    直接打开ACCESS数据库查看内容没有乱码,可是asp从ACCESS数据库中读取出来的中文全是乱码。页面<HEAD>中也加了
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    原因:是少了这句
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
    <%@LANGUAGE="xxx" CODEPAGE="936"%> 
    一般又分为<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>和<%@LANGUAGE="javascript" CODEPAGE="936"%>两种。LANGUAGE="VBSCRIPT"和LANGUAGE="javascript",申明ASP当前使用的编程脚本分别为VBSCRIPT和javascript。一般在程序第一行进行申明。当使用该脚本申明后,以下所有程序运用全得符合该脚本语言的所有语法,两者不能混淆使用,否则出错。我们在写ASP时,一般不做限定,因为经常会在一ASP页面写不同的脚本,当然这也是以牺牲执行效率为代价的。
    CodePage:可读/可写。整型。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例如,ANSI代码页为1252,日文代码页为932,简体中文代码页为936。一般情况下,当你上传到国外网页空间,或者提取数据库记录等出现乱码时,就采用这种方法解决。
      

  2.   

    To flyjalor:
    你回复的这段话,我也在网上找到过,但是那是解决网页的,而且是使用ASP读取access。而我要的是在我的开发环境下解决乱码问题!!!!!VC2005 + ado + access 来实现我的界面多语种,英文系统下读中文出乱码!!!!!
      

  3.   

    应该跟程序没关系,Access数据库到英文系统下的问题吧,直接打开Access数据库看是不是也都是??,装个Access的补丁把。如果英文系统没装Access就是ADO的事装个ADO的中文补丁(如果是用ADO连的数据库)
      

  4.   

    应该要在ADO读access数据之前设置ADO的编码方式另外要设置access的编码方式为Unicode或是GB的
      

  5.   

    使用MultiByteToWideChar将从数据库中读出来的字符串转换成Unicode编码的就应该没问题了.WCHAR wszUserName[UNLEN+1];          // Unicode user name
        WCHAR wszDomain[256]; 
        LPBYTE ComputerName;    struct _SERVER_INFO_100 *si100;  // Server structure
        struct _USER_INFO_2 *ui;         // User structure// Convert ANSI user name and domain to Unicode    MultiByteToWideChar( CP_ACP, 0, UserName,
            strlen(UserName)+1, wszUserName,   
         sizeof(wszUserName)/sizeof(wszUserName[0]) );
        MultiByteToWideChar( CP_ACP, 0, Domain,
            strlen(Domain)+1, wszDomain, sizeof(wszDomain)/sizeof(wszDomain[0]) );
      

  6.   

    怎么设置ADO编码方式,能讲清楚点吗?谢谢
      

  7.   

    问题已经在access专区得到解决了!已结贴现在想问下:怎么设置ADO编码方式?解决后马上结帖,
      

  8.   

    ADODB.Stream对象将字节流转换为字符流
    并设置Charset 为 "GB2312"     http://www.juyo.org/juyo/work/Adodb-Stream/