slu and和unicode的规则

时间:2009-05-04 15:04:39

标签: python google-app-engine url unicode friendly-url

在研究了人们如何以不同的方式对游戏进行重击之后,我注意到它经常忽略了如何处理非英语游戏。

url编码非常严格。见http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

所以,例如,人们如何处理诸如

之类的标题slu ..

“Unalágrimacayóenla arena”

人们可以为印欧语言提出一个合理的表格,即。可以通过ISO-8859-1编码的东西。例如,转化表会翻译'á'=> 'a',所以slu will

“UNA-Lágrima酒店-岛烯LA-舞台”

但是,我正在使用unicode(特别是使用UTF-8编码),所以不保证我会得到什么类型的代码点(我必须为不能成为ISO-8859-的东西做准备1编码。

我是个骗子。怎么处理这个?我是否应该为ISO_8859-1范围内的字符(< 255)提供转换表并删除其他所有内容?

编辑:为了提供更多的背景,先验,我真的不希望用非印欧语言来强化数据,但如果我遇到这样的话,我想有一个计划数据。 扩展ASCII的转换表会很好。有什么指针吗?

此外,由于人们在询问,我正在使用python,在Google App Engine上运行

4 个答案:

答案 0 :(得分:8)

slughifi library中可以找到几乎完整的音译表(适用于拉丁语,希腊语和西里尔字符集)。它面向Django,但可以轻松修改以满足一般需求(我在AppEngine上使用基于Werkzeug的应用程序)。

答案 1 :(得分:4)

我只是使用utf-8作为URL路径。只要域名是非IDN FF3,IE就可以正常工作。 Google会正确读取并显示它们。 IRI RFC允许Unicode。只需确保正确解析传入的URL。

答案 2 :(得分:2)

一般来说,这取决于您期望获得的语言。如果您的主要用户群是日语,则删除除ISO-8859-1字符之外的所有内容都不太可能。

也就是说,如果你的字符集转换库支持它,一个选项可能是使用音译模式。例如,使用GNU iconv,可以执行以下操作:

] echo Una lágrima cayó en la arena|iconv -f utf8 -t ascii//TRANSLIT
Una lagrima cayo en la arena

如您所见,重音字符会自动转换为ASCII范围内的某些内容。如何将其转换为代码当然取决于您正在使用的语言,但如果您的语言基于GNU iconv进行字符集转换(如果它是在linux上,它可能是),这个技巧可能直接应用于只需将“ascii // TRANSLIT”指定为转换为字符集即可。

然而,有一点需要注意的是,只有字符“看起来像”ASCII中的某些内容才有效。例如:

] echo 我輩は猫である。名前はまだない。|iconv -f utf8 -t ascii//TRANSLIT                                               
????????????????

正如您所看到的,它对日语没什么帮助,之后需要进一步处理以删除不适合URL的字符。

答案 3 :(得分:1)

如果所有其他方法都失败了,您可以使用转换表,但可能会有更好的解决方案。您使用的服务器端语言是什么?