Tôi đang sử dụng osql để chạy một số tập lệnh sql dựa vào cơ sở dữ liệu và sau đó tôi cần xem xét tệp kết quả để kiểm tra xem có bất kỳ lỗi nào xảy ra không. Vấn đề là Perl dường như không thích thực tế là các tập tin kết quả là Unicode.Làm cách nào để mở một tệp Unicode bằng Perl?
Tôi đã viết một kịch bản thử nghiệm nhỏ để kiểm tra nó và đầu ra đi ra tất cả warbled:
$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;
}
}
Bất kỳ ý tưởng? Tôi đã thử giải mã bằng cách sử dụng decode_utf8
nhưng nó không có sự khác biệt. Tôi cũng đã cố gắng thiết lập mã hóa khi mở tệp.
Tôi nghĩ rằng vấn đề có thể là osql đặt tệp kết quả theo định dạng UTF-16, nhưng tôi không chắc chắn. Khi tôi mở tệp trong ô văn bản, nó chỉ cho tôi biết 'Unicode'.
Edit: Sử dụng perl v5.8.8 Edit: Hex bãi:
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.
Đầu ra trông như thế nào? Bạn có thể cung cấp một hex + ascii dump của sự khởi đầu của tập tin? –
Output trông giống như sau: ■ 1> 2> M s g 1 5 1 5 1, L e v đ l 1 6, S t t e 1 –
Tôi sẽ sử dụng gì để cung cấp một hex + ascii bãi chứa của sự bắt đầu của tập tin? –