【发布时间】:2011-01-28 12:54:27
【问题描述】:
我正在使用 osql 对数据库运行几个 sql 脚本,然后我需要查看结果文件以检查是否发生任何错误。问题是 Perl 似乎不喜欢结果文件是 Unicode 的事实。
我写了一个小测试脚本来测试它,输出结果全是颤抖的:
$file = shift;
open OUTPUT, $file or die "Can't open $file: $!\n";
while (<OUTPUT>) {
print $_;
if (/Invalid|invalid|Cannot|cannot/) {
push(@invalids, $file);
print "invalid file - $inputfile - schedule for retry\n";
last;
}
}
有什么想法吗?我尝试使用decode_utf8 进行解码,但没有区别。我也试过在打开文件时设置编码。
我认为问题可能是 osql 将结果文件置于 UTF-16 格式,但我不确定。当我在文本板中打开文件时,它只会告诉我“Unicode”。
编辑:使用 perl v5.8.8 编辑:十六进制转储:
file name: Admin_CI.User.sql.results
mime type:
0000-0010: ff fe 31 00-3e 00 20 00-32 00 3e 00-20 00 4d 00 ..1.>... 2.>...M.
0000-0020: 73 00 67 00-20 00 31 00-35 00 30 00-30 00 37 00 s.g...1. 5.0.0.7.
0000-0030: 2c 00 20 00-4c 00 65 00-76 00 65 00-6c 00 20 00 ,...L.e. v.e.l...
0000-0032: 31 00 1.
【问题讨论】:
-
输出是什么样的?你能提供文件开头的 hex+ascii 转储吗?
-
输出如下所示: ■1 > 2 > M s g 1 5 1 5 1 , L e v e l 1 6 , S t a t e 1
-
我将使用什么来提供文件开头的 hex+ascii 转储?
-
如果您使用的是SQL 2005或更高版本,您可以考虑从
OSQL切换到SQLCMD,其中有一个命令开关来控制输出文件的编码(-f)
标签: perl file unicode encoding