Hiển thị kí tự Unicode trong Java

Hello mọi người,
Mọi người cho em hỏi là để xóa các ký tự unicode của một chuỗi nhập từ bàn phím khi output như thế nào ạ? Liệu có thể được trong java không?
Em đã hỏi google nhưng chỉ làm được với chuỗi có sẵn
Ai biết giúp em với
Em cảm ơn.

Ảnh minh họa

Ý bạn là chuyển về dạng không dấu, đúng như đường dẫn của bài này: Hiển thị kí tự Unicode trong Java hien-thi-ki-tu-unicode-trong-java.
Có chứ, bất kì ngôn ngữ nào hỗ trợ Unicode đều làm được.
Javascript:

var str = "Á À Ả Ã Ạ Ắ Ằ Ẳ Ẵ Ặ\nHiển thị kí tự Unicode trong Java".normalize("NFD").split("").filter(v => v.charCodeAt(0) < 256).join("");
console.log(str);

Kết quả:

A A A A A A A A A A
Hien thi ki tu Unicode trong Java

Cách trên do làm biếng dùng vòng lặp nên tách thành mảng rồi lọc.

Java thì cũng tương tự.
https://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html

Đó là cách hay nhất nếu ngôn ngữ bạn dùng có hỗ trợ Normalizer.
Nếu ngôn ngữ không hỗ trợ thì bạn phải liệt kê từng kí tự thay thế.
Kiểu như mã giả này:

toReplace = ['Á', 'À', 'Ắ', 'Ằ',...]
replaceBy = 'A'
str = "Á À Ả Ã Ạ Ắ Ằ Ẳ Ẵ Ặ"
res = str.replace(toReplace, replaceBy)
4 Likes

chữ đ ko normalize được thì phải :joy:

3 Likes

Chữ đ (và Đ) là phụ âm “lạc loài” nhất trong tiếng Việt. :rofl:
Mình làm danh sách các nguyên âm có dấu trong tiếng Việt, thế mà vẫn phải thêm tụi nó vào cuối:

a á à ả ã ạ
ă ắ ằ ẳ ẵ ặ
â ấ ầ ẩ ẫ ậ
e é è ẻ ẽ ẹ
ê ế ề ể ễ ệ
i í ì ỉ ĩ ị
o ó ò ỏ õ ọ
ô ố ồ ổ ỗ ộ
ơ ớ ờ ở ỡ ợ
u ú ù ủ ũ ụ
ư ứ ừ ử ữ ự
y ý ỳ ỷ ỹ ỵ

A Á À Ả Ã Ạ
Ă Ắ Ằ Ẳ Ẵ Ặ
 Ấ Ầ Ẩ Ẫ Ậ
E É È Ẻ Ẽ Ẹ
Ê Ế Ề Ể Ễ Ệ
I Í Ì Ỉ Ĩ Ị
O Ó Ò Ỏ Õ Ọ
Ô Ố Ồ Ổ Ỗ Ộ
Ơ Ớ Ờ Ở Ỡ Ợ
U Ú Ù Ủ Ũ Ụ
Ư Ứ Ừ Ử Ữ Ự
Y Ý Ỳ Ỷ Ỹ Ỵ

đ Đ

Chính xác là không tách 2 thằng này được.
yY cũng khá đặc biệt.

Thêm nữa: đ (\u0111) và Đ (\u0110) cũng có cặp anh em nằm trong ANSI:
ð (\xF0) và Ð (\xD0) tên gọi là Eth.
Kiểu viết hoa giống nhau như ðúc. :smiling_imp:

4 Likes

𝒰𝓃𝒾𝒸ℴ𝒹ℯ 𝔫𝔥𝔦ề𝔲 𝔱𝔥ứ l͇ẫ͇n͇ ͇l͇ộ͇n͇ 𝕝ắ𝕞 :rofl:

26 chữ cái tiếng Anh nó có tùm lum “font” trong Unicode :V :V http://slothsoft.net/UnicodeMapper/

3 Likes

Ý mình là Normalizer chuỗi được nhập từ bàn phím ý(chạy chương trình rồi nhập). Còn chuỗi nhập sẵn thì mình làm được rồi.

Mình không thể làm điều tương tự với chuỗi được nhập từ bàn phím.
Chuỗi có sẵn thì mình có thể làm được(Ảnh bên trên).
Bạn có cách nào không. Giúp mình với.

Ảnh minh họa

Đổi font của netbeans console sang font khác hỗ trợ kí tự Unicode thôi, như Consolas chẳng hạn.

2 Likes

cái này là đọc Unicode string từ console thì Java ko làm được ở Windows đâu :V

có đáp án ở đây: https://stackoverflow.com/questions/8669056/unicode-input-in-a-console-application-in-java nhưng phải load kernel32.dll và xài ReadConsoleW ở trong đó =]

3 Likes

Các bước thực hiện :V :V

  • Download jna.jar rồi bỏ nó vào đâu đó, ví dụ thư mục chính của project

  • Download Kernel32.java rồi bỏ nó vào thư mục ./console/win32.

  • Download W32Utils.java rồi bỏ nó vào thư mục ./console/win32/tests.

  • Download ReadUnicode.java rồi bỏ nó vào thư mục chính. Đổi tên thành Main.java và đổi 1 số thứ sau đây:

    package console.win32.tests;
    
    import com.sun.jna.Pointer;
    import com.sun.jna.ptr.IntByReference;
    
    import console.win32.Kernel32;
    
    /**
    * Sample app that reads Unicode from the console.
    * 
    * @author McDowell
    * @see Kernel32#ReadConsoleW(Pointer, char[], int, IntByReference, Pointer)
    */
    public class ReadUnicode {
    

    thành

    import com.sun.jna.Pointer;
    import com.sun.jna.ptr.IntByReference;
    import console.win32.tests.W32Utils;
    import console.win32.Kernel32;
    
    /**
    * Sample app that reads Unicode from the console.
    *
    * @author McDowell
    * @see Kernel32#ReadConsoleW(Pointer, char[], int, IntByReference, Pointer)
    */
    public class Main {
    

    (bỏ package, đổi tên class thành Main, import W32Utils)

  • Nếu cài đặt các file như trên thì sẽ có cấu trúc test project như sau:

    C:\USERS\TRI\DESKTOP\JAVA\UNICODE
    │   jna.jar
    │   Main.java
    └───console
        └───win32
            │   Kernel32.java
            └───tests
                    W32Utils.java
    
  • Chạy các dòng lệnh (trên Powershell, trên cmd thì sửa 1 tí là được):

    • Compile file .java thành file .class:

      javac -cp jna.jar Main.java console/win32/Kernel32.java console/win32/tests/W32Utils.java
      

    • Link chúng nó lại thành unicode.jar:

      jar -cvf unicode.jar Main.class console/win32/tests/W32Utils.class console/win32/Kernel32.class
      

    • Cuối cùng là chạy file jar:

      java -cp 'unicode.jar;jna.jar' Main
      

      (nếu xài cmd.exe thì gõ java -cp unicode.jar;jna.jar Main ko có dấu ’ ')

      image

3 Likes

Bảng Console của Netbean không hỗ trợ nhập Unicode. Đến chữ à thuộc ANSI cũng thành cái ô vuông luôn. :smile:
Cách khác là đọc từ tập tin. :hugs:

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