mysql – Perl字符串操作和utf8 / unicode
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – Perl字符串操作和utf8 / unicode,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1520字,纯文字阅读大概需要3分钟。
内容图文
我有我认为将成为一个简单的Web表单,直到人们开始将包含utf8字符的维基百科中的文本字符串复制并粘贴到输入字段中.我的perl CGI脚本打开MySQL数据库连接并设置
$DBH->{mysql_enable_utf8} = 1;
$DBH->do("set names 'utf8';");
我正在尝试使用Encode模块对目标输入值进行解码,使用和编码,但这并不像我预期的那样工作.网页设置为utf8字符集.
在这种情况下,我的目标字符串是Baden-Württemberg[从列出德国城镇名称的维基百科页面复制].发送请求时,我可以看到目标字符串为:Baden-Württemberg.虽然这不是很好地通过我的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";
在’-W’之后,$thing的值有一个’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-umlaut去了哪里?我怎样才能找回来?
解决方法:
ü是ü的urlencode.虽然在构建URL时可能需要它,但您不希望MySQL使用它.
当你将utf8字节存储为latin1列时,就会发生这种情况.请提供SHOW CREATE TABLE.
我认为你不需要编码/ decode_utf8.
Malformed UTF-8 character (unexpected non-continuation byte 0x72, immediately after start byte 0xfc) at ./test.pl line 13.
表示您有十六进制FC(这是ü的latin1十六进制),但您将字符串视为utf8(“unexpected ..”)72是随后的r.
结论:在整个处理过程中,你不是utf8(手中的字节,SET NAMES,CHARACTER SET等).
内容总结
以上是互联网集市为您收集整理的mysql – Perl字符串操作和utf8 / unicode全部内容,希望文章能够帮你解决mysql – Perl字符串操作和utf8 / unicode所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。