2015-02-06 72 views
0

這是奇怪的,很難解釋什麼是錯的,但我會盡我所能。Perl催化劑編碼問題

由於某些原因模板的值改變了他們的編碼(我很確定他們是)。

控制器文件(編碼UTF-8):

print STDERR "ąęść"; 
$c->stash->{some_variable} = "ąęść"; # some unicode chars 

模板文件(以UTF-8編碼):

[% some_variable %]<br> 
test: ąęść 

如在瀏覽器輸出我得到:

ÄÄÅÄ 
test: ąęść 

控制檯上的輸出(啓用UTF-8編碼):

ąęść 
+1

你在你的控制器文件中有'use utf8;'嗎? – ThisSuitIsBlackNot 2015-02-06 17:27:23

+4

看起來你的TT配置中沒有'ENCODING =>'utf-8'。 – Borodin 2015-02-06 17:53:16

+0

配置沒問題。出於某種原因,模板文件內容已損壞。當我從模板文件中刪除所有東西,並將其中只有變量,它的作品... – J33nn 2015-02-06 18:14:39

回答

2

請看看Catalyst Wiki在Using UnicodeCatalyst::View::TT提供的良好文檔。 Perl Unicode Cookbook可幫助您更好地理解UTF-8的Perl支持,通常比現在可用的其他語言更好。

您可能需要使用編輯器保存帶有UTF-8 BOM標記的模板,以便您的文本編輯器在保存時確實編碼了您的模板文件,或者如果不設置BOM,則至少將文件編碼定義爲UTF- 8每次你保存它。

1

對於unicode支持和UTF-8,通常有催化劑(5.90084)的最新穩定版本有很多修復。 Catalyst現在默認爲UTF-8,但當然總是有一些硬邊緣。您應該查看有關該主題的最新文檔,以查看發生了什麼問題。

如果您的模板包含多字節字符,那麼確實需要設置BOM或查看您選擇的模板視圖的文檔。