2011-01-22 2 views
0

다음 코드는 내 문제를 보여줍니다. 그것을 실행하면 나에게 "UCS-2LE : 코드 포인트"\ x {20541} "C : /Perl/site/lib/Tk/Widget.pm 205 행에 너무 높습니다 (E : \ test)라는 오류 메시지가 표시됩니다. PL 라인 9 ".Perl Tk에서 코드 포인트가 너무 높은 문제를 수정하는 방법이 있습니까?

내 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 [email protected] if [email protected]; 

MainLoop; 
+0

U + 20541이 실제로 유효하지 않으므로 16 진수/10 진수 문제 일 수 있습니다. '倽'문자는 십진수 * 20541이지만 [U + 503D] (http://www.fileformat.info/info/unicode/char/503d/index.htm)입니다. – dkarp

+5

@dkarp : U + 20541은 완벽하게 유효한 유니 코드 문자()이며 BMP (Basic Multilingual Plane) 외부에 있으며 16 비트에 맞지 않습니다. Tcl/Tk는 유니 코드 문자를 UCS-2LE (문자 당 16 비트 고정)로 저장하기 때문에이 문자를 저장할 수 없습니다. 전체 유니 코드는 [wishlist] (http://wiki.tcl.tk/883)에 있습니다 (# 92). – mscha

+0

@mscha : 유니 코드는 0x10FFFF까지만 올라갑니다. 0x20541은 그보다 큽니다. – tchrist

답변

1

Tk는 현재 기본 다국어 평면 (예 : U + 00FFFF까지)에서 유니 코드 문자를 지원하지 않습니다. 이 문제를 해결할 계획이 있지만 Tk 코드 내부에서 많은 것을 변경해야합니다 (새로운 문자열 관리 레이어가 효율적으로 수행되어야하고 실제로 정규화를 정렬해야하기 때문에) 그래서 서둘러서 일하는 것이 아닙니다. 누군가가 이것을 분류하는 데 도움을 주면 환영 할 것이라고 확신합니다.

그러나 이 아니고이 BMP 외부에 있어야한다고 생각하면 (내가 궁금한 점은 말할 수 없습니다. 죄송합니다) 코드에 다른 인코딩 문제가 있습니다. 이를 진단하는 한 가지 방법은 Unicode charts에서 값을 얻는 것입니다. 왜냐하면 이들이 완벽하게 완전하고 명확하기 때문에 우리는 우리가 말하는 것이 똑같은지 확인할 수 있습니다.

관련 문제