ODI导出文件乱码

有个项目需求,将oracle的一张表导出为文本文件,每个月生成一个。这种mapping想想也觉得简单,但却碰到了乱码的问题,搞了一整天,特记录于此。

现象: 中文内容在导出文本的文本中显示为问号(英文正常,废话)
解决思路:
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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值