现象: 中文内容在导出文本的文本中显示为问号(英文正常,废话)
解决思路:
1. 数据库字符编码与操作系统编码不相符。我这里是linux系统和oracle数据库。
推荐命令:
echo $LANG #查看操作系统字符编码,这里为utf8
echo $NLS_LANG #查看数据库字符编码,这里也为utf8
排除这个原因。
2. java不支持中文
写了一个java的小程序输出中文到屏幕和文件,都没有问题。遂排除此项。
3. oracle数据库导出中文有问题
用spool命令导出一个文件测试,发现没有问题。spool命令实例:
#!/bin/sh
DB_USER=bidw #DB USER
DB_PWD=zaq12wsx #DB PASSWORD
DB_SERV=abc_dw_prd #DB SERVICE NAME
sqlplus -s $DB_USER/$DB_PWD@$DB_SERV<<EOF
set underline off
set trimspool on //去除重定向(spool)输出每行的拖尾空格,缺省为off
set linesize 5200
set pagesize 20000
set newpage 1
set heading off //输出域标题,缺省为on 设置为off就去掉了select结果的字段名,只显示数据
set term off
set wrap on
set echo off //设置运行命令是是否显示语句
set feedback off //回显本次sql命令处理的记录条数
set newp none //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的
set pagesize 0 //输出每页行数,缺省为24,为了避免分页,可设定为0
set termout off //显示脚本中的命令的执行结果
spool /u/ODI2F/salebudget_3101G.txt
#使用你的select语句进行替换;
spool off
EOF
4. 怀疑ODI不支持中文,但在ODI中对含有中文的datastore预览数据也没有问题。
5. 最后怀疑是文件本身存在编码问题,终于在ODI官方文档中发现,他在用JDBC导出文件时,默认的文件编码不是UTF8,而是 ISO8859_1。
修改JDBC文件的连接字符串为:
jdbc:snps:dbfile?ENCODING=utf8
再导出文件,中文已经能正常显示。
附JAVA文件编码类型:
https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/675255/viewspace-2063981/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/675255/viewspace-2063981/