2011-08-30 25 views
5

Tôi cần kiểm tra xem một tỉnh của Trung Quốc có được chứa trong một địa chỉ bằng tiếng Hoa hay không.Đối sánh mẫu với ký tự Trung Quốc (được mã hóa bằng UTF-8) trong Java

Tôi có thể đọc và viết các ký tự tiếng Trung dễ dàng.

Tôi đã cố gắng sử dụng phương thức String của indexOf() để kiểm tra xem một tỉnh (ví dụ: 广东) có nằm trong một địa chỉ (中国 广东) hay không. Tuy nhiên, điều này luôn trả về -1.

Khi tôi cố gắng kiểm tra các con số (ví dụ 103 có được chứa trong 9910399) thì nó hoạt động tốt.

Tôi có cần phải làm điều gì đó khác để xử lý đối sánh chuỗi UTF-8 không? Cảm ơn. Matt

+3

Java 'String' luôn là UTF-16 trong nội bộ, vì vậy bất kỳ vấn đề nào bạn gặp phải đều không phải là UTF-8 có liên quan. Bạn có chắc chắn 100% rằng các ký tự trong chuỗi là chính xác những ký tự bạn đang tìm kiếm không? Kiểm tra với 'System.out.println ((int) s.charAt (i))' trên cả hai mặt. –

+2

Ví dụ của bạn làm việc cho tôi, bạn đã kiểm tra xem tệp .java của bạn có lưu bằng mã hóa đúng không? –

Trả lời

2

Tôi vừa thử ví dụ của bạn và mặc dù tôi không có phông chữ Chineese trên hệ thống của mình, vì vậy các ký tự không được hiển thị chính xác indexOf() hoạt động tốt cho tôi.

Vì vậy, hãy kiểm tra mã hóa tệp nguồn của bạn (* .java). Ví dụ nếu bạn đang sử dụng eclipse kiểm tra nó dưới Window/Preferences/General/Workspace/Text file Encoding. Tôi đang sử dụng UTF-8.

Suy nghĩ thứ hai là mã hóa được trình biên dịch java sử dụng. Trong trường hợp nhật thực bạn không phải nói gì cả. Tôi nghĩ rằng đối với javac, bạn có thể nên đặt mã hóa rõ ràng bằng cách sử dụng -encoding. Nếu không, mã hóa hệ điều hành mặc định có thể sẽ được sử dụng.

Chúc may mắn.

+0

Xin chào Alex, cảm ơn rất nhiều! Tôi nhận ra tôi không đủ cụ thể. Bạn hoàn toàn đúng - ví dụ trên hoạt động tốt nếu tôi chỉ sử dụng các chuỗi trực tiếp. Vấn đề xảy ra khi tôi đọc các chuỗi này từ một tệp. Tôi in ra các ký tự thực tế và tôi nhận thấy rằng ASCII 34 được hiển thị trước các ký tự Unicode. –

+0

Có vẻ như tôi không gặp vấn đề cụ thể của Trung Quốc - vấn đề về đọc tệp của nó. Tôi có 2 tập tin - tỉnh và địa chỉ. Tôi có nhân vật A ở tỉnh và AB trong địa chỉ. Khi tôi đọc chúng bằng cách sử dụng readline() và in chúng ra, tôi thấy những điều sau được in ra (1) Đối với tỉnh khi chỉ có A - 34:65:34 (2) đối với những người chỉ có AB - 34: 65: 66: 34 Bạn không chắc chắn nên làm gì để đảm bảo rằng tỉnh được khớp với địa chỉ, hoặc A khớp với AB –

+0

@Matt - AlexR là chính xác; xem xét các phương thức I/O có liên quan để mã hóa các đầu vào (String ID hoặc Charset). Bạn phải luôn giải mã các đầu vào dữ liệu văn bản khi thích hợp (bao gồm các tệp nguồn Java). Xem [ở đây] (http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html) cho một mồi cơ bản. Xem [ở đây] (http://illegalargumentexception.blogspot.com/2009/09/java-character-inspector-application.html) cho một ứng dụng nguyên thủy có thể giúp chẩn đoán các vấn đề. – McDowell

Các vấn đề liên quan