Masalahnya adalah, seperti yang Anda tahu, ada ribuan karakter dalam bagan Unicode dan saya ingin mengonversi semua karakter yang mirip menjadi huruf yang menggunakan alfabet Inggris.
Sebagai contoh, berikut adalah beberapa konversi:
ҥ->H
Ѷ->V
Ȳ->Y
Ǭ->O
Ƈ->C
tђє Ŧค๓เℓy --> the Family
...
dan saya melihat bahwa ada lebih dari 20 versi huruf A / a. dan saya tidak tahu bagaimana mengklasifikasikan mereka. Mereka terlihat seperti jarum di tumpukan jerami.
Daftar lengkap karakter unicode ada di http://www.ssec.wisc.edu/~tomw/java/unicode.html atau http://unicode.org/charts/charindex.html . Coba gulir ke bawah dan lihat variasi hurufnya.
Bagaimana saya bisa mengonversi semua ini dengan Java? Tolong bantu aku :(
java
unicode
special-characters
diacritics
AhmetB - Google
sumber
sumber
Jawaban:
Mengeposkan ulang posting saya dari Bagaimana cara menghapus diakritik (aksen) dari string di .NET?
Metode ini berfungsi dengan baik di java (murni untuk tujuan menghilangkan tanda diakritik alias aksen) .
Ini pada dasarnya mengubah semua karakter beraksen menjadi rekan deAccented mereka diikuti oleh mengkombinasikan diakritik mereka. Sekarang Anda dapat menggunakan regex untuk menghapus diakritik.
sumber
Ini adalah bagian dari Apache Commons Lang pada ver. 3.0.
kembali
An
Juga lihat http://www.drillio.com/id/software-development/java/removing-accents-diacritics-in-any-language/
sumber
Mencoba untuk "mengubah semuanya" adalah pendekatan yang salah untuk masalah tersebut.
Pertama, Anda perlu memahami keterbatasan dari apa yang Anda coba lakukan. Seperti yang telah ditunjukkan oleh orang lain, diakritik ada karena suatu alasan: mereka pada dasarnya adalah huruf unik dalam alfabet bahasa itu dengan makna / bunyinya sendiri, dll.: Menghilangkan tanda itu sama seperti mengganti huruf acak dalam kata bahasa Inggris. Ini bahkan sebelum Anda mempertimbangkan bahasa Cyrillic dan teks berbasis skrip lainnya seperti Arab, yang tidak dapat "dikonversi" ke bahasa Inggris.
Jika harus , karena alasan apa pun, mengubah karakter, maka satu-satunya cara yang masuk akal untuk mendekatinya adalah terlebih dahulu mengurangi ruang lingkup tugas yang ada. Pertimbangkan sumber input - jika Anda membuat kode aplikasi untuk "dunia Barat" (untuk menggunakan frasa sebagus apa pun), kemungkinan Anda tidak perlu mengurai karakter Arab. Demikian pula, rangkaian karakter Unicode berisi ratusan simbol matematika dan gambar: tidak ada cara (mudah) bagi pengguna untuk langsung memasukkan ini, sehingga Anda dapat menganggap mereka dapat diabaikan.
Dengan mengambil langkah-langkah logis ini, Anda dapat mengurangi jumlah karakter yang mungkin diurai ke titik di mana operasi pencarian / penggantian berbasis kamus dapat dilakukan. Itu kemudian menjadi sejumlah kecil pekerjaan yang sedikit membosankan menciptakan kamus, dan tugas yang sepele untuk melakukan penggantian. Jika bahasa Anda mendukung karakter Unicode asli (seperti Java) dan mengoptimalkan struktur statis dengan benar, pencarian dan penggantian semacam itu cenderung sangat cepat.
Ini berasal dari pengalaman bekerja pada aplikasi yang diperlukan untuk memungkinkan pengguna akhir untuk mencari data bibliografi yang termasuk karakter diakritik. Array pencarian (seperti dalam kasus kami) mungkin memerlukan waktu 1 hari untuk diproduksi, untuk mencakup semua tanda diakritik untuk semua bahasa Eropa Barat.
sumber
Karena pengkodean yang mengubah "Keluarga" menjadi "tђє Ŧ ค ๓ เy" secara acak dan tidak mengikuti algoritma apa pun yang dapat dijelaskan oleh informasi dari titik-titik kode Unicode yang terlibat, tidak ada cara umum untuk menyelesaikan ini secara algoritmik.
Anda perlu membuat pemetaan karakter Unicode menjadi karakter latin yang mereka sukai. Anda mungkin dapat melakukan ini dengan beberapa pembelajaran mesin pintar tentang mesin terbang aktual yang mewakili titik-titik kode Unicode. Tapi saya pikir upaya untuk ini akan lebih besar daripada membangun pemetaan itu secara manual. Terutama jika Anda memiliki banyak contoh yang dapat digunakan untuk membangun pemetaan Anda.
Untuk memperjelas: beberapa substitusi sebenarnya dapat dipecahkan melalui data Unicode (seperti yang ditunjukkan oleh jawaban lainnya), tetapi beberapa huruf tidak memiliki hubungan yang masuk akal dengan karakter latin yang mereka sukai.
Contoh:
sumber
Permintaan asli telah dijawab.
Namun, saya memposting jawaban di bawah ini bagi mereka yang mungkin mencari kode transliterasi generik untuk menerjemahkan setiap charset ke Bahasa Latin / Bahasa Inggris di Jawa.
Arti tranliterasi yang naif: Diterjemahkan string dalam bentuk akhir / target charset terdengar seperti string dalam bentuk aslinya. Jika kita ingin mentransiterasi charset apa saja ke bahasa Latin (huruf bahasa Inggris), maka ICU4 (perpustakaan ICU4J di java) akan melakukan pekerjaan itu.
Berikut ini cuplikan kode di java:
sumber
String yang diuji: ÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝß
Diuji:
Pilihan terakhir adalah yang terbaik.
sumber
Jika perlu mengubah "òéışöç-> oeisoc", Anda dapat menggunakan ini sebagai titik awal:
JDK 1.6 menyediakan kelas java.text.Normalizer yang dapat digunakan untuk tugas ini.
Lihat contoh di sini
sumber
Anda dapat mencoba menggunakan
unidecode
, yang tersedia sebagai permata ruby dan sebagai modul perl di cpan . Pada dasarnya, ini berfungsi sebagai tabel pencarian besar, di mana setiap titik kode unicode berhubungan dengan karakter atau string ascii.sumber
Tidak ada cara mudah atau umum untuk melakukan apa yang Anda inginkan karena hanya pendapat subjektif Anda bahwa huruf-huruf ini terlihat loke huruf latin yang ingin Anda konversi. Mereka sebenarnya adalah surat-surat yang terpisah dengan nama dan suara mereka sendiri yang berbeda yang kebetulan terlihat seperti huruf latin.
Jika Anda menginginkan konversi itu, Anda harus membuat tabel terjemahan Anda sendiri berdasarkan pada huruf latin apa yang Anda pikir sebagai huruf non-latin yang harus dikonversi.
(Jika Anda hanya ingin menghapus tanda diakritik, ada beberapa jawaban di utas ini: Bagaimana cara menghapus diakritik (aksen) dari string di .NET? Namun Anda menjabarkan masalah yang lebih umum)
sumber
Saya terlambat ke pesta, tetapi setelah menghadapi masalah ini hari ini, saya menemukan jawaban ini sangat bagus:
Referensi: https://stackoverflow.com/a/16283863
sumber
Masalah dengan "mengkonversi" Unicode sewenang-wenang ke ASCII adalah bahwa makna karakter bergantung pada budaya. Misalnya, "ß" ke orang yang berbahasa Jerman harus dikonversi ke "ss" sedangkan penutur bahasa Inggris mungkin akan mengubahnya menjadi "B".
Tambahkan ke fakta bahwa Unicode memiliki beberapa titik kode untuk mesin terbang yang sama.
Hasilnya adalah bahwa satu-satunya cara untuk melakukan ini adalah membuat tabel besar dengan setiap karakter Unicode dan karakter ASCII yang ingin Anda konversi. Anda dapat mengambil jalan pintas dengan menormalkan karakter dengan aksen ke normalisasi dari KD, tetapi tidak semua karakter menormalisasi ke ASCII. Selain itu, Unicode tidak mendefinisikan bagian mana dari mesin terbang yang "aksen".
Berikut adalah kutipan kecil dari aplikasi yang melakukan ini:
sumber
Mengikuti Kelas melakukan trik:
sumber