對於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. 土耳其SQL排序問題(土耳其語「I」)
- 2. 土耳其語支持
- 3. 用土耳其語設置
- 4. 機械土耳其
- 5. 土耳其語言問題MVC 5
- 6. Android WebView LoadData - 土耳其語字符
- 7. PHP土耳其語月NOW()函數
- 8. SQL Server土耳其語字符情況
- 9. Java土耳其字符
- 10. MySql土耳其文字符
- 11. 土耳其的Windows Azure
- 12. SQLite和土耳其排序/訂貨
- 13. PHP:xml-rpc和土耳其字符
- 14. Chrome認爲英語語言網站是土耳其語
- 15. 如何爲SpeechRecognizer設置土耳其語語音Google SpeechToText APi
- 16. Android c2dm如何使用土耳其語(所有語言)字符?
- 17. 如何在cmusphinx上爲土耳其語進行語音識別?
- 18. 什麼是土耳其測試?
- 19. 聯繫表格土耳其字符
- 20. Java:土耳其編碼Mac/Windows
- 21. IE中的土耳其字符問題
- 22. mysql utf8土耳其字符不正確
- 23. Xcode Sqlite編碼土耳其字符
- 24. Angularjs貨幣格式₺(土耳其里拉)?
- 25. Laravel 5土耳其角色問題
- 26. Elasticsearch搜索土耳其字符
- 27. JSP土耳其字符問題
- 28. asp.net土耳其字符問題
- 29. ruby-aws亞馬遜機械土耳其
- 30. 機械土耳其人工作嗎?
已收藏。土耳其是棘手的,由於無問題我的問題。這是這種功能的最佳測試案例。 – 2010-08-05 11:53:09
與正確處理Unicode相比,瞭解monads是一個Cakewalk。 – 2010-08-05 15:07:44
@Alex:土耳其語?更不要說德語的多字母大寫ß - > SS和希臘語的上下文相關小寫Σ - >σ/ς。 – kennytm 2010-08-05 16:18:07