对于Char数据类型,如何指定我要使用土耳其语而不是英语i作为toLower和toUpper函数?Haskell,Char,Unicode和土耳其语
回答
文本和文本ICU包
截至2011年,最好的办法是使用text包,以及the Text ICU package的toLower
功能,它支持一个语言环境参数Char
操作,
import Data.Text (pack, unpack)
import Data.Text.ICU (LocaleName(Locale), toLower)
main = do
let trLocale = Locale "tr-TR"
upStr = "ÇIİĞÖŞÜ"
lowStr = unpack $ toLower trLocale $ pack upStr
putStrLn $ "toLower " ++ upStr ++ " gives " ++ lowStr
运行此:
> toLower ÇIİĞÖŞÜ gives çıiğöşü
尽管这个例子String
之间的转换,你也可以只留在text
格式的数据。
也许尝试设置您的语言环境?不确定
语言环境对默认的'Data.Char'库没有影响。 – grddev 2010-08-05 08:40:26
但是,语言环境会影响'Data.Text.ICU'包。 – 2011-04-22 17:41:57
Haskell中的Data.Char
库与语言环境无关。它适用于所有Unicode字符,但可能不符合您的预期。在the corresponding Unicode chart你可以看到“dotted”/“dotless”i的映射。
toUpper 'i'
=>'I'
toUpper 'ı'
=>'I'
toLower 'I'
=>'i'
toLower 'İ'
=>'i'
因此,很明显,无论是两个变换是可逆的。如果你想要可逆的处理土耳其字符,看起来你必须使用C库或者自己编辑。
UPDATE:的Haskell 98 report使这很清楚,而Haskell 2010 report只说Char
对应的Unicode字符,并且不为明确界定的toLower
和toUpper
语义。
'下来'我'应该给一个无点'我'。 – 2010-08-05 16:42:13
@Alexandre:我记录了Haskell是如何工作的,以及(链接的)Unicode规范说的。如果你想要其他行为,你需要实现你自己的(如在Jrockway的回复中)。 – grddev 2010-08-05 17:22:21
一个简单的问题编程:
import qualified Data.Char as Char
toLower 'I' = 'ı'
toLower x = Char.toLower x
然后
toLower <$> "I AM LOWERCASE" == "ı am lowercase"
您可能会检查this post,使用文本库。
- 1. OrientDB遇到Unicode,土耳其语和枚举的问题
- 2. 土耳其SQL排序问题(土耳其语“I”)
- 3. 邮件在土耳其语
- 4. 设置土耳其语
- 5. 用土耳其语设置
- 6. 土耳其语支持
- 7. Unicode字符到土耳其字符
- 8. 设置土耳其语和英语语言环境:将土耳其语字符翻译为拉丁语等效
- 9. 用土耳其语配置替换char字符串
- 10. 土耳其语语音识别
- 11. Python和土耳其资本
- 12. Lucene和土耳其字符
- 13. 机械土耳其
- 14. Hibernate搜索土耳其语Charachter
- 15. PHP土耳其语月NOW()函数
- 16. 在PHP中规范化土耳其语?
- 17. SQL Server土耳其语字符情况
- 18. 土耳其语言问题MVC 5
- 19. Android WebView LoadData - 土耳其语字符
- 20. PHP土耳其语言显示问题
- 21. MySql土耳其文字符
- 22. 转换土耳其字符
- 23. 土耳其谷歌tts api
- 24. MYSQL - 土耳其字符
- 25. Google Places API在土耳其
- 26. 土耳其的Windows Azure
- 27. Java土耳其字符
- 28. PHP:xml-rpc和土耳其字符
- 29. SQLite和土耳其排序/订货
- 30. 如何在java中将unicode字符串转换为土耳其语?
已收藏。土耳其是棘手的,由于无问题我的问题。这是这种功能的最佳测试案例。 – 2010-08-05 11:53:09
与正确处理Unicode相比,了解monads是一个Cakewalk。 – 2010-08-05 15:07:44
@Alex:土耳其语?更不要说德语的多字母大写ß - > SS和希腊语的上下文相关小写Σ - >σ/ς。 – kennytm 2010-08-05 16:18:07