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ý ?

viết 10:33 ngày 01/10/2018

lạ vậy, có lẽ C# coi “ch” là 1 ký tự à??

明玉 viết 10:46 ngày 01/10/2018

Giống cái bảng chữ cái ở đây á: http://www.vietnamtudien.org/chunom-trichdan/

viết 10:45 ngày 01/10/2018

chuẩn Unicode đâu có vụ này phải ko? Khổ ông Microsoft quá

明玉 viết 10:40 ngày 01/10/2018

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ữ Ă

CultureInfo culture = new CultureInfo("en-EN");
var test = new List<string> { "CO", "CH", "D", "Đ", "A", "Ă", "Â", "B", "Ê", "E", "Ơ", "Ô" };
test.Sort((left, right) => {
   return string.Compare(left, right, true, culture);
});
viết 10:42 ngày 01/10/2018

đắng quá, đem lên StackOverflow hỏi thử xem

Trần Hoàn viết 10:35 ngày 01/10/2018

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”

viết 10:41 ngày 01/10/2018

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

明玉 viết 10:44 ngày 01/10/2018

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.

Bài liên quan
0