以下代码演示了我的问题。运行它会给我一条错误消息,内容如下:“UCS-2LE:代码点”在C:/Perl/site/lib/Tk/Widget.pm第205行太高,在E:\ test。第9行“。
我的Tk版本是804.028,我在WinXP(简体中文版)上运行ActivePerl 10.0.0。
有没有人知道是否有办法绕过它?总是如此谢谢:)
use strict;use warnings;
use utf8;
use Tk;
my $mw = MainWindow->new;
my $text = ""; #A Chinese character
eval{
$mw->Label(-text => $text)->pack;
};
warn $@ if $@;
MainLoop;
答案 0 :(得分:1)
Tk当前不支持基本多语言平面之外的Unicode字符(即,最多为U + 00FFFF)。虽然有计划解决这个问题,但它需要在Tk代码中更改很多东西(因为必须完成新的字符串管理层才能使事情变得高效,而且需要真正理清规范化)所以它并没有匆匆忙忙地工作。我敢肯定,如果有人提供帮助进行整理,那将是受欢迎的。
但是,如果您认为您的角色不不在BMP之外(我无法从您的问题中说出来,很遗憾地说),那么您的代码中还会遇到其他编码问题。诊断这一点的一种方法是从Unicode charts获取值,因为它们是正确完整且确定的,然后我们可以确保我们所谈论的内容是相同的。