01/10/2018, 08:32
String.Compare và Vấn đề Bảng Chữ cái Tiếng Việt
Ví dụ nếu mình viết thế này:
CultureInfo culture = new CultureInfo("vi-VN");
var rs = string.Compare("CH", "CO", true, culture);
thì rs = 1, => CH đi sau CO
Như vậy, bảng chữ cái của CultureInfo(“vi-VN”) là “A, Ă, Â, B, C, CH, D, Đ…” (Coi phụ âm kép và phụ âm ba là 1 ký tự) ??
Nếu mình viết là:
CultureInfo culture = new CultureInfo("en-EN");
var rs = string.Compare("CH", "CO", true, culture);
thì rs == -1, => CH đi trước CO
Xin hỏi mọi người nếu mình muốn sắp xếp các chuỗi Tiếng Việt theo trật tự từ điển thì nên làm thế nào cho hợp lý ?
Bài liên quan
lạ vậy, có lẽ C# coi “ch” là 1 ký tự à??
Giống cái bảng chữ cái ở đây á: http://www.vietnamtudien.org/chunom-trichdan/
chuẩn Unicode đâu có vụ này phải ko? Khổ ông Microsoft quá
Nếu đổi sang en-EN hoặc Invariant thì có vẻ là sắp theo kí tự đơn, nhưng chữ Â lại đi trước chữ Ă
đắng quá, đem lên StackOverflow hỏi thử xem
…
UTF-16 dựng sẵn thì ‘Â’ = U+00C2; ‘Ă’ = U+0102 => ‘Â’ trước ‘Ă’ =))
Tiện thể lướt web lung tung thì thấy cái này: http://archives.miloush.net/michkap/archive/2005/08/27/457224.html
Và cái này, đúng luôn câu hỏi của thớt:
=> Lỗi do “người ta”
từ tháng 3 / 2008 tới nay là 9 năm mà mấy ông Microsoft vẫn ko chịu theo chuẩn
Mình mới thử trên .NET 4.6.2 và vẫn thế , hẳn là phải tự làm Comparer rồi.