ITPub博客

首页 > 大数据 > 数据挖掘 > ODI导出文件乱码

ODI导出文件乱码

原创 数据挖掘 作者:bluesea0012002 时间:2016-03-25 21:34:19 0 删除 编辑
有个项目需求,将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博客 ” ,链接:https://blog.itpub.net/675255/viewspace-2063981/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ODI mapping前置sql
请登录后发表评论 登录
全部评论
  • 博文量
    7
  • 访问量
    14336