问题:asp.net 向oracle 插入中文乱码 oracle 字符集 AMERICAN_AMERICA.US7ASCII 而oracle的字符集是不可更改的。那么在程序如何处理?
出现乱码的原因无非也就那么几个,要么代码的编码和数据库的不统一,要么从数据库获取数据的时候采取的编码出错,要么就是界面展示数据的时候出错了!不妨从这几个方面着手进行修改,希望对你有用
搜到两个看起来靠谱的方法
1.
以上的大伙们不要乱发言好不好,根本不是你们说的那样,那只是字体问题,具体解决你可以到注册表的以下键目录下修改就可以:
Oracle-->home0-->nls_lang
将它的AMERICAN_AMERICA.US7ASCII
修改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK
就行了,记得将软件重新启一下
一定行的,记的给我加分哦
2.==============================================================================
column VALUE format a20
select parameter,value from v$nls_parameters;
PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET US7ASCII
NLS_SORT BINARY
在softing上新建数据库oracle 8.05字符集均为us7ascii,us7ascii
connect system/manager@rube;
select name,value$ from sys.props$;
NAME VALUE$
DICT.BASE 2
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET US7ASCII
NLS_SORT BINARY
NLS_NCHAR_CHARACTERSET US7ASCII
NLS_RDBMS_VERSION 8.0.5.0.0
GLOBAL_DB_NAME RUBE.WORLD
update sys.props$ set value$='WE8ISO8859P1' where name like 'NLS_CHARACTERSET';
update sys.props$ set value$='WE8ISO8859P1' where name like 'NLS_NCHAR_CHARACTERSET';
commit;
svrmgr30
connect internal/oracle@rube
shutdown imeediate
startup这样在修改数据库客户端字符集为WE8ISO8859P1,数据库字符集us7acii插入汉字和显示汉字均正常
然后使用exp80导出oracle8.05下用户的表到文件user.dmp,查看oracle字符集和编码
31 =001F WE8ISO8859P1 查看user.dmp第2,3字节为 001F = 31852 =0354 ZHS16GBK
select nls_charset_id('WE8ISO8859P1') from dual;
select nls_charset_name(31) from dual;
select nls_charset_id('US7ASCII') from dual;select nls_charset_id('ZHS16GBK') from dual;
使用二进制工具修改文件user.dmp的第二,三字节为oracle817的字符集编码0354
在使用oracle817导入User.dmp文件导入以后,原来在oracle805(us7ascii)下显示的数据库
在oracle817(ZHS16GBK)显示和插入正常
能正确导入的原因:oracle805在配置客户端字符集合,能正常显示和插入汉字的情况下,exp
导出的汉字均为国家标准编码(可即区位码),在orcle817中只要将oracle805
Exp文件字符集WE8ISO8859P1的ID改为oracle817的字符集ZHS16GBK的ID,在用oracle的imp工具导入既能正常导入.
以下是错误的修改
update sys.props$ set value$='US7ASCII' where name like 'NLS_CHARACTERSET';
update sys.props$ set value$='US7ASCII' where name like 'NLS_NCHAR_CHARACTERSET';
commit;
svrmgr30
connect internal/oracle@rube
shutdown imeediate
startup在插入和显示汉字不正常,是因为WE8ISO8859P1是US7ASCII的超集,超集不能改为子集
update sys.props$ set value$='ZHS16CGB231280' where name like 'NLS_CHARACTERSET';
update sys.props$ set value$='ZHS16CGB231280' where name like 'NLS_NCHAR_CHARACTERSET';
commit;
svrmgr30
connect internal/oracle@rube
shutdown imeediate
startup在插入和显示汉字不正常,是因为ZHS16CGB231280和US7ASCII是不同的集合,不能转换
没有环境,你测试下,看是否可用