Đối với loại dữ liệu Char, làm cách nào để xác định rằng tôi muốn sử dụng tiếng Thổ Nhĩ Kỳ thay vì tiếng Anh i cho các hàm toLower và toUpper?Haskell, Char, Unicode và Thổ Nhĩ Kỳ
Trả lời
văn bản và gói text-ICU
Tính đến năm 2011, đặt cược tốt nhất của bạn là sử dụng các gói text, và toLower
chức năng của the Text ICU package, mà hỗ trợ Char
hoạt động tham số của một miền địa phương,
Từ this example:
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
Chạy này:
> toLower ÇIİĞÖŞÜ gives çıiğöşü
trong khi ví dụ này chuyển đổi giữa String
, bạn cũng có thể để dữ liệu ở định dạng text
.
có thể thử đặt ngôn ngữ của bạn? không chắc chắn
Ngôn ngữ không ảnh hưởng đến thư viện 'Data.Char' mặc định. Tuy nhiên, – grddev
Miền địa phương ảnh hưởng đến gói 'Data.Text.ICU'. –
Thư viện Data.Char
trong Haskell không phụ thuộc vào ngôn ngữ. Nó hoạt động cho tất cả các ký tự Unicode, nhưng có lẽ không theo cách bạn mong đợi. Trong the corresponding Unicode chart bạn có thể xem các ánh xạ cho "chấm"/"không có dấu chấm" của tôi.
toUpper 'i'
=>'I'
toUpper 'ı'
=>'I'
toLower 'I'
=>'i'
toLower 'İ'
=>'i'
Như vậy, rõ ràng là không ai trong số hai biến đổi có thể đảo ngược . Nếu bạn muốn xử lý đảo ngược các ký tự Thổ Nhĩ Kỳ, có vẻ như bạn phải sử dụng thư viện C hoặc cuộn thư của riêng bạn.
UPDATE: Các Haskell 98 report làm cho điều này khá rõ ràng, trong khi Haskell 2010 report chỉ nói rằng Char
tương ứng với một ký tự Unicode, và không định nghĩa một cách rõ ràng ngữ nghĩa của toLower
và toUpper
.
'toLower 'Tôi nên đưa ra một dấu chấm' i'. –
@ Alexandre: Tôi đã ghi lại cách hoạt động của Haskell và đặc tả Unicode (liên kết) nói gì. Nếu bạn muốn hành vi khác, bạn cần phải thực hiện của riêng bạn (như trong trả lời của jrockway). – grddev
Một vấn đề đơn giản Lập trình:
import qualified Data.Char as Char
toLower 'I' = 'ı'
toLower x = Char.toLower x
Sau đó
toLower <$> "I AM LOWERCASE" == "ı am lowercase"
Bạn có thực sự nói với tôi rằng tôi phải hack mọi thư viện gọi Char.toLower để hỗ trợ quốc tế hóa không? –
@ Jonathan: Có, vì đặc tả Haskell chỉ nói tuân theo tiêu chuẩn Unicode, cung cấp các quy tắc tôi đã nêu ở trên. Do đó, bất kỳ thư viện nào sử dụng 'Char.toLower' đều không được chuẩn bị cho việc quốc tế hóa. – grddev
@ Jonathan Allen: Nếu bạn không muốn có hành vi Unicode chuẩn, thì không, bạn không thể sử dụng thư viện theo tiêu chuẩn Unicode. Thật không may, nhưng khá rõ ràng như vậy. – Chuck
Bạn có thể kiểm tra this post, sử dụng thư viện văn bản.
- 1. Kiểm tra Thổ Nhĩ Kỳ là gì?
- 2. OrientDB gặp sự cố với Unicode, tiếng Thổ Nhĩ Kỳ và enums
- 3. Giải pháp cho Thổ Nhĩ Kỳ-I bằng C++
- 4. Chuyển đổi kiểu chữ Thổ Nhĩ Kỳ trong JavaScript
- 5. Nhân vật Thổ Nhĩ Kỳ Qt trong cụm từ thông dụng
- 6. Làm thế nào để khắc một nửa của một Thổ Nhĩ Kỳ tạ ơn?
- 7. Java - Định dạng ngày với Thổ Nhĩ Kỳ hoặc các tháng
- 8. Delphi 2009 + Unicode + Char-size
- 9. Cách tôi có thể bắt đầu xây dựng wordnet cho ngôn ngữ Thổ Nhĩ Kỳ để sử dụng trong phân tích tình cảm
- 10. PHP: Unicode nhấn mạnh char và dấu phụ
- 11. Unicode được lưu trữ trong C char
- 12. Chuỗi Unicode xóa char khỏi chuỗi
- 13. Soạn định dạng char unicode cho NSString
- 14. Char hoặc String -> Giá trị Unicode trong Scala?
- 15. Java - Gán unicode dấu nháy đơn để char
- 16. C++ UNICODE và STL
- 17. Phân bổ bộ nhớ char * và char []
- 18. DllImport và char *
- 19. C - Sự khác biệt giữa "char var []" và "char * var"?
- 20. Unicode trong javadoc và nhận xét?
- 21. GCC, Unicode và __FUNCTION__
- 22. Unicode- VARCHAR và NVARCHAR
- 23. Python: Unicode và ElementTree.parse
- 24. JSON chỉ định "bất kỳ ký tự UNICODE nào"?
- 25. SSIS Chuyển đổi giữa Unicode và Lỗi không phải Unicode
- 26. Char * p và scanf
- 27. Thêm char và int
- 28. char! = (Ký char), char! = (Unsigned char)
- 29. Nhập punning, char [] và dereferencing
- 30. C# gán char và mảng char cho chuỗi?
Được yêu thích. Thổ Nhĩ Kỳ là khó khăn do dotless tôi vấn đề. Đây là trường hợp thử nghiệm tốt nhất cho các chức năng như vậy. –
Hiểu biết về monads là một bước chơi bánh so với xử lý Unicode chính xác. –
@Alex: Thổ Nhĩ Kỳ? Không đề cập đến chữ hoa chữ thường ß -> SS của Đức và chữ thường phụ thuộc vào ngữ cảnh của Hy Lạp Σ -> σ/ς. – kennytm