【发布时间】:2015-07-11 12:27:06
【问题描述】:
在人们开始从 Wikipedia 复制并粘贴包含 utf8 字符的文本字符串到输入字段之前,我认为这将是一个简单的 Web 表单。我的 perl CGI 脚本打开一个 MySQL 数据库连接并设置
$DBH->{mysql_enable_utf8} = 1;
$DBH->do("set names 'utf8';");
我正在尝试使用Encode 模块对目标输入值进行解码、使用和编码,但这并不符合我的预期。网页设置为 utf8 字符集。
在这种情况下,我的目标字符串是Baden-Württemberg [复制自列出德国城镇名称的维基百科页面]。发送请求后,我可以看到目标字符串为:Baden-W%C3%BCrttemberg。但这并不能很好地通过我的 CGI 脚本。
我有以下示例脚本:
#!/usr/local/bin/perl -w
use strict;
select(STDOUT);
$|++;
use feature 'unicode_strings';
use Encode;
use utf8;
binmode STDOUT, ":utf8";
my $thing = "Baden-Württemberg";
print STDOUT "$thing\n";
my $decodedThing = decode_utf8($thing);
print STDOUT encode_utf8($decodedThing) . "\n";
$thing 的值在“-W”之后有一个带有变音符号的“u”。
当我运行脚本时,我得到:
# ./test.pl
Malformed UTF-8 character (unexpected non-continuation byte 0x72, immediately after start byte 0xfc) at ./test.pl line 13.
Baden-Wrttemberg
Baden-Wrttemberg
u 变音符号去哪儿了?如何找回?
【问题讨论】: