到目前为止,我工作的项目仅在源代码中使用ASCII。由于I18N领域即将发生的一些变化,以及我们在测试中需要一些Unicode字符串,我们正在考虑咬住子弹并将源代码移动到UTF-8,同时使用utf8
编译指示({{1 }})
由于代码现在是ASCII,我不希望代码本身有任何问题。但是,我不太清楚我们可能会遇到任何副作用,而我认为考虑到我们的环境(perl5.8.8,Apache2,mod_perl,带FreeTDS驱动程序的MSSQL Server),我很可能会得到一些副作用。
如果你过去做过这样的迁移:我可以期待什么问题?我该如何管理它们?
答案 0 :(得分:11)
utf8
编译指示仅告诉Perl您的源代码是UTF-8编码的。如果你在源代码中只使用了ASCII,那么Perl理解源代码就不会有任何问题。您可能希望在源代码管理中创建一个分支以确保安全。 :)
如果您需要处理文件中的UTF-8数据,或者将UTF-8写入文件,则需要在文件句柄上设置编码,并将数据编码为外部位数。例如,请参阅With a utf8-encoded Perl script, can it open a filename encoded as GB2312?。
查看告诉您Unicode的Perl文档:
答案 1 :(得分:4)
几年前,我将我们内部的mod_perl平台(~35k LOC)移至UTF-8。以下是我们必须考虑/改变的事情:
open($fh,"<:utf8",$filename)
:raw
层$b=substr(lc($utf8string),0,2048)
随机失败但$a=lc($utf8string);$b=substr($a,0,2048)
无效!$uri=utf_decode($r->uri())
指定的字符集还有一个 - 这是黄金法则 - 不要只是破解直到它起作用,确保你完全理解在给定的en /解码情况下发生了什么!
我相信你已经把这些中的大部分都整理好了,但希望所有能帮助那些人的人避免我们经历的许多小时调试。