So sánh 1 chuỗi Unicode dựng sẵn với 1 chuỗi Unicode tổ hợp

Mình có 2 chuỗi sau:

var Chuoi1 = "Xin chào"; // Được viết bằng unicode
var Chuoi2 = "Xin chào"; // Được viết bằng unicode tổ hợp

nhìn thì trông có vẻ không khác gì nhau nhưng khi so sánh 2 chuỗi này có bằng nhau hay không? với javascript thì nó sẽ báo là sai!.

Câu hỏi mình đặt ra là mọi người có cách nào so sánh lỏng hơn được không?, nghĩa là khác mã vẫn cho đúng.

Try this:

3 Likes

Nếu là code của bạn thì dùng chung 1 kiểu encode.
Nếu không phải mà lấy ở đâu về thì làm cách nào đấy convert nó sang cùng 1 dạng.
Mình thì sẽ chuyển hết thành không dấu rồi so sánh :3

Để đi sâu hơn thì buộc phải tìm hiểu về unicode trong js thôi.

3 Likes

đấy code của mình, mình muốn người dùng nhập vì họ có thể sử dụng loại bảng mã khác nên javascript sẽ song sánh là sai. nếu làm theo cách của bạn “chuyển về không dấu” nhưng nếu cái bảng mã dùng trong hàm chuyển của bạn là unicode nhưng của họ là unicode tổ hợp thì sẽ không được nhé bạn :))

Ngôn ngữ nào chả thế bạn ơi, đâu phải mỗi JS :))
Có thể đối với bạn, 2 chuỗi đó giống nhau (Và giống luôn cả chuỗi “Xin chào” trong bảng mã TCVN3 thời vua Hùng nữa :joy:) nhưng kỳ thực đó là các ký tự khác nhau. Và mình nghĩ bạn nên chuyển hết tất cả về Unicode dựng sẵn đi, vì nói chung thế giới dùng cái đó nhiều hơn, cũng như việc xây dựng bảng so sánh dấu cũng đỡ phức tạp.

2 Likes

mình sử dụng php thấy khi so sánh thì nó chuyển về cùng một dạng, có phải là php được hỗ trợ thêm phải không?, còn việc chuyển hết về unicode thì cái dữ liệu của mình cực kì nhiều!, phức tạp thì không quan tâm vì mình không phải là dùng để học nữa

Thì bạn bắt người dùng nhập từ keyboard của bạn đi. Có lib keyboard = js đấy
Mình nói là chuyển về 1 dạng thì có nhiều kiểu, chuyển về k dấu là 1 kiểu, chuyển từ chữ sang số là 1 kiểu, chuyển hết về base64 cũng là 1 kiểu. Quan trọng là bạn thôi.

1 Like

Không được đâu bạn nếu chơi kiểu chèn ép bắt buộc là mất điểm họ sẽ chuyển sang trang khác vì sự bất tiện đó

1 Like

Bạn cố gắng xây dựng hàm chuyển tổ hợp thành dựng sẵn trước khi nhập thông tin nhé :)) Hình như có người làm rồi đó?

1 Like

Có rồi, dùng normalize

a = Chuoi1.normalize();
b = Chuoi2.normalize();
a === b ?
1 Like

Bạn có thể so sánh a==b thì nó bằng nhau, còn a===b thì js hiểu là phải cũng cả kiểu dữ liệu. Không biết mình nói thế có đúng không :3

Không phải nhé :slight_smile:

Hiểu đại khái là tự dạng (glyph) ế có thể được biểu diễn bằng duy nhất 1 codepoint, hoặc là 2 codepoints cho ê và dấu sắc :smiley: nên so theo bit là khác nhau. Còn đem TCVN3 vào là chuyện khác rồi.

3 Likes

Nó cùng là kiểu string:slightly_smiling_face:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?