Saya ingin menampilkan karakter Unicode di Java. Jika saya melakukan ini, itu berfungsi dengan baik:
String symbol = "\u2202";
simbol sama dengan "β". Itu yang saya mau.
Masalahnya adalah saya mengetahui nomor Unicode dan perlu membuat simbol Unicode darinya. Saya mencoba (kepada saya) hal yang jelas:
int c = 2202;
String symbol = "\\u" + c;
Namun, dalam kasus ini, simbol sama dengan "\ u2202". Bukan itu yang saya inginkan.
Bagaimana saya dapat membuat simbol jika saya mengetahui nomor Unicode-nya (tetapi hanya pada saat run-time --- saya tidak dapat membuat kode keras seperti contoh pertama)?
Jawaban:
Transmisikan
int
ke filechar
. Anda dapat mengubahnya menjadiString
penggunaanCharacter.toString()
:EDIT:
Ingatlah bahwa urutan escape dalam kode sumber Java (
\u
bit) ada di HEX, jadi jika Anda mencoba mereproduksi urutan escape, Anda memerlukan sesuatu sepertiint c = 0x2202
.sumber
c
lebih kecil dari 0x10000, atau pendekatan ini akan rusak parah.Java chars go up to 0xFFFF
. Saya tidak tahu hal itu.Jika Anda ingin mendapatkan unit kode berenkode UTF-16 sebagai
char
, Anda dapat mengurai integer dan mentransmisikannya seperti yang disarankan orang lain.Jika Anda ingin mendukung semua poin kode, gunakan
Character.toChars(int)
. Ini akan menangani kasus di mana titik kode tidak dapat dimasukkan dalam satuchar
nilai.Doc mengatakan:
sumber
char
.scala> "π¨βπ¨".map(_.toInt).flatMap((i: Int) => Character.toChars(i)).map(_.toHexString)
memberikanres11: scala.collection.immutable.IndexedSeq[String] = Vector(f468, 200d, f3a8)
emoji ini, "penyanyi pria", dialamatkan dengan tiga poin kodeU+1f468
,U+200d
danU+1f3a8
. Angka paling signifikan hilang. Saya dapat menambahkannya dengan bitwise ATAU ( stackoverflow.com/a/2220476/1007926 ), tetapi tidak tahu cara menentukan karakter parsing mana yang telah terpotong. Terima kasih!Jawaban lain di sini hanya mendukung unicode hingga U + FFFF (jawaban hanya berurusan dengan satu contoh char) atau tidak memberi tahu cara mendapatkan simbol sebenarnya (jawaban berhenti di Character.toChars () atau menggunakan metode yang salah setelah itu), jadi menambahkan jawaban saya di sini juga.
Untuk mendukung poin kode tambahan juga, inilah yang perlu dilakukan:
Saya juga melakukan pengujian cepat tentang metode konversi mana yang berfungsi dan mana yang tidak
sumber
new String(Character.toChars(121849));
istirahat di konsol Eclipse, tetapi versi tiga baris berfungsi.str4
tugas, tidak haruscode
menjadicodePoint
bukan?Ingat itu
char
adalah tipe integral, dan dengan demikian dapat diberi nilai integer, serta konstanta char.sumber
int
Anda cari. Anda sedang mencari 0x2202. Salahku. Bagaimanapun, jika Anda memilikiint
titik kode yang Anda cari, Anda dapat mentransmisikannya ke achar
, dan menggunakannya (untuk membuat aString
jika Anda mau).Yang ini bekerja dengan baik untuk saya.
Sekarang text2 akan memiliki β.
sumber
sumber
Beginilah cara Anda melakukannya:
Solusi ini dibuat oleh Arne VajhΓΈj.
sumber
int c = 2202
, mana yang salah! Solusi yang lebih baik daripada ini adalah mudah untuk mengatakanint c = 0x2202
yang akan menyelamatkan Anda melalui String, dll.char ccc...
garis tengah . Cukup gunakanint cc = 0x2202;
dan kemudianfinal String text=String.valueOf(cc);
Meskipun ini adalah pertanyaan lama, ada cara yang sangat mudah untuk melakukannya di Java 11 yang dirilis hari ini: Anda dapat menggunakan kelebihan baru dari Character.toString () :
Karena metode ini mendukung titik kode Unicode apa pun, panjang String yang dikembalikan tidak harus 1.
Kode yang dibutuhkan untuk contoh yang diberikan dalam pertanyaan adalah:
Pendekatan ini menawarkan beberapa keuntungan:
char
.char[]
, yang sering kali Anda inginkan. Jawaban yang diposting oleh McDowell sesuai jika Anda ingin titik kode dikembalikan sebagaichar[]
.sumber
int codePoint = 0x2202;
Kemudian:String s = Character.toString(codePoint); // <<< Requires JDK 11 !!!
Atau dalam satu baris:System.out.println(Character.toString(0x2202)); // Prints β
Semoga ini membantu orang lain menggunakan fitur JDK 11 ini.Kode di bawah ini akan menulis 4 karakter unicode (diwakili oleh desimal) untuk kata "be" dalam bahasa Jepang. Ya, kata kerja "be" dalam bahasa Jepang memiliki 4 karakter! Nilai karakter dalam desimal dan telah dibaca ke dalam array String [] - menggunakan split misalnya. Jika Anda memiliki Oktal atau Hex, parseInt juga mengambil radix.
sumber
Berikut ini adalah blok untuk mencetak karakter unicode antara
\u00c0
ke\u00ff
:sumber
Sayangnya, menghilangkan satu serangan balik seperti yang disebutkan pada komentar pertama (newbiedoodle) tidak membawa hasil yang baik. Sebagian besar (jika tidak semua) IDE mengeluarkan kesalahan sintaksis. Alasannya adalah karena format Java Escaped Unicode mengharapkan sintaks "\ uXXXX", di mana XXXX adalah 4 digit heksadesimal, yang wajib diisi. Upaya untuk melipat string ini dari potongan-potongan gagal. Tentu saja, "\ u" tidak sama dengan "\\ u". Sintaks pertama berarti lolos 'u', kedua berarti lolos backlash (yang merupakan backlash) diikuti oleh 'u'. Aneh, bahwa pada halaman Apache disajikan utilitas, yang melakukan perilaku ini. Namun pada kenyataannya, itu adalah utilitas meniru Escape . Apache memiliki beberapa utilitasnya sendiri (saya tidak mengujinya), yang melakukan ini untuk Anda. Mungkin, bukan itu yang ingin Anda miliki.Tetapi utilitas ini 1 memiliki pendekatan solusi yang baik. Dengan kombinasi yang dijelaskan di atas (MeraNaamJoker). Solusi saya adalah membuat string mimik yang lolos ini dan kemudian mengubahnya kembali menjadi unicode (untuk menghindari pembatasan Unicode yang lolos nyata). Saya menggunakannya untuk menyalin teks, jadi mungkin saja dalam metode uencode akan lebih baik menggunakan '\\ u' kecuali '\\\\ u'. Cobalah.
sumber
char c = (char) 0x2202; String s = "" + c;
sumber
(JAWABAN DI DOT NET 4.5 dan di java, harus ada pendekatan serupa)
Saya dari West Bengal di INDIA. Seperti yang saya mengerti masalah Anda adalah ... Anda ingin menghasilkan mirip dengan 'ΰ¦ ' (Ini adalah surat dalam bahasa Bengali) yang memiliki Unicode HEX:
0X0985
.Sekarang jika Anda mengetahui nilai ini sehubungan dengan bahasa Anda, lalu bagaimana Anda akan menghasilkan simbol Unicode khusus bahasa itu, bukan?
Di Dot Net sesederhana ini:
Sekarang x adalah jawabanmu. Tetapi ini adalah konversi HEX oleh HEX dan konversi kalimat ke kalimat adalah pekerjaan bagi peneliti: P
sumber