我的程序在中文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();
} 期待高手解决,问题很急!!!!!!
解决后马上结贴
但是到英文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();
} 期待高手解决,问题很急!!!!!!
解决后马上结贴
由于国外的免费主页空间容量大、而且支持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。一般情况下,当你上传到国外网页空间,或者提取数据库记录等出现乱码时,就采用这种方法解决。
你回复的这段话,我也在网上找到过,但是那是解决网页的,而且是使用ASP读取access。而我要的是在我的开发环境下解决乱码问题!!!!!VC2005 + ado + access 来实现我的界面多语种,英文系统下读中文出乱码!!!!!
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]) );
并设置Charset 为 "GB2312" http://www.juyo.org/juyo/work/Adodb-Stream/