我需要确保我使用 perl 脚本创建的输出文件具有代码集 cp1252 而不是 UTF-8,因为它将在 UNIX SQLplus 框架中使用,该框架在将德语“变音符号”插入数据库时无法正确处理列(我在 Windows 10 中使用草莓 perl v5.18,我无法在 UNIX SQL 环境中设置 NLS_LANG 或 chcp)。
使用这个小测试脚本,我可以重现输出文件“testfile1.txt”始终为 UTF-8 但“testfile2.txt”如预期的那样是 CP1252。即使文本中没有“特殊”字符,如何强制“testfile1.txt”的输出也为 CP1252?
#!/usr/bin/env perl -w
use strict;
use Encode;
# the result file under Windows 10 will have UTF-8 codeset
open(OUT,'> testfile1.txt');
binmode(OUT,"encoding(cp-1252)");
print OUT encode('cp-1252',"this is a test");
close(OUT);
# the result file under Windows 10 will have Windows-cp1252 codeset
open(OUT,'> testfile2.txt');
binmode(OUT,"encoding(cp-1252)");
print OUT encode('cp-1252',"this is a test with german umlauts <ÄäÜüÖöß>");
close(OUT);