软件正在生成 UTF-8 文件,但将内容写入非 unicode 文件。我无法更改该软件,必须按现在的样子获取输出。不知道这是否会正确显示在此处,但德语变音符号“ä”在文件中显示为“ä”。
如果我在 Notepad++ 中打开文件,它会告诉我文件是 UTF-8(无 BOM)编码的。现在,如果我在记事本中说“转换为 ANSI”,然后将文件编码切换回 UTF-8(不转换),则文件中的德语变音符号是正确的。如何在 Perl 中实现完全相同的行为?无论我到现在为止尝试过什么,变音符号都变得更糟了。
要重现,请为自己创建一个 UTF-8 编码文件并将内容写入其中:
好,我会试试。创建自己的 UTF-8 文件并将其写入:Männer Schüle Vöogel SüÃ
然后,在 UTF-8 mysql 数据库上,创建一个带有 varchar 字段和 UTF8_unicode 编码的表。现在,使用这个脚本:
use utf8;
use DBI;
use Encode;
if (open FILE, "test.csv") {
my $db = DBI->connect(
'DBI:mysql:your_db;host=127.0.0.1;mysql_compression=1', 'root', 'Yourpass',
{ PrintError => 1 }
);
my $sql="";
my $sql = qq{SET NAMES 'utf8';};
$db->do($sql);
while (my $line = <FILE>) {
my $sth = $db->prepare("INSERT IGNORE INTO testtable (testline) VALUES (?);");
$sth->execute($line);
}
}
文件的确切内容将被写入数据库。但是,我期望在数据库中的输出是德语变音符号:
Männer Schüler Vögel Süß
那么,我怎样才能正确转换呢?