یونیکد یک مجموعه کاراکتر بینالمللی است که دامنه وسیعی از حروف، نمادها و اسکریپتها از زبانهای مختلف در سراسر جهان را در بر میگیرد.
سیستم یونیکد در جاوا
زبان برنامهنویسی جاوا که مستقل از پلتفرم است، بهصورت داخلی از کاراکترهای یونیکد پشتیبانی میکند و به توسعهدهندگان اجازه میدهد برنامههایی بسازند که بهصورت یکپارچه با زبانها و اسکریپتهای گوناگون کار کنند.
پیش از یونیکد، استانداردهای مختلفی برای نمایش کاراکترها وجود داشت −
- ASCII − برای ایالات متحده.
- ISO 8859-1 − برای زبانهای اروپای غربی.
- KOI-8 − برای زبان روسی.
- GB18030 و BIG-5 − برای زبان چینی.
برای پشتیبانی از کدهای چندزبانه، برخی کاراکترها با یک بایت، برخی با دو بایت نمایش داده میشدند. حتی ممکن بود یک کد مشخص، در یک زبان نمایانگر یک کاراکتر خاص باشد و در زبان دیگر نمایانگر کاراکتر دیگری.برای رفع این مشکل، سیستم یونیکد طراحی شد که در آن هر کاراکتر با ۲ بایت نمایش داده میشود. از آنجا که جاوا برای پشتیبانی از زبانهای چندگانه توسعه داده شد، از سیستم یونیکد بهره گرفت. کمترین مقدار در یونیکد \u0000
و بیشترین مقدار \uFFFF
است.
رویکردها: کار با کاراکترها و مقادیر یونیکد
دو رویکرد برای کار با کاراکترهای یونیکد در جاوا وجود دارد:
- استفاده از توالیهای گریز یونیکد (Unicode Escape Sequences)
- ذخیرهسازی مستقیم کاراکترهای یونیکد
رویکرد اول شامل نمایش کاراکترهای یونیکد با استفاده از توالیهای گریز است و زمانی مفید است که نتوان کاراکترها را مستقیماً در کد جاوا تایپ یا نمایش داد. رویکرد دوم شامل ذخیره مستقیم کاراکترهای یونیکد در متغیرها است و زمانی راحتتر است که کاراکترها قابل تایپ یا نمایش مستقیم باشند.
انتخاب رویکرد بستگی به نیاز خاص برنامه دارد. با این حال، به طور کلی، رویکرد دوم سادهتر و راحتتر است وقتی کاراکترها قابل تایپ یا نمایش باشند، در حالیکه رویکرد اول زمانی ضروری است که این امکان وجود نداشته باشد.
۱. استفاده از توالیهای گریز یونیکد
یکی از روشهای ذخیره کاراکترهای یونیکد در جاوا استفاده از توالیهای گریز یونیکد است. توالی گریز مجموعهای از کاراکترها است که نمایانگر یک کاراکتر خاص هستند. در جاوا، یک توالی گریز یونیکد با \u
آغاز میشود و به دنبال آن چهار رقم هگزادسیمال قرار میگیرد که نشاندهنده کد یونیکد کاراکتر موردنظر است.
مثال: استفاده از توالیهای گریز یونیکد
package com.tutorialspoint; public class UnicodeCharacterDemo { public static void main (String[]args) { //Unicode escape sequence char unicodeChar = '\u0041'; // point for 'A' System.out.println("Stored Unicode Character: " + unicodeChar); } }
کد بالا را کامپایل و اجرا کنید. این کد نتیجه زیر را تولید خواهد کرد:
خروجی
Stored Unicode Character: A
در قطعه کد بالا، توالی گریز یونیکد \u0041
نمایانگر کاراکتر ‘A’ است. این توالی گریز به متغیر نوع char
با نام unicodeChar
اختصاص داده شده و سپس کاراکتر ذخیرهشده در خروجی چاپ میشود.
۲. ذخیرهسازی مستقیم مقادیر یونیکد
بهطور جایگزین، شما میتوانید مستقیماً یک کاراکتر یونیکد را در یک متغیر char
با قرار دادن آن بین علامتهای نقل قول تکی (' '
) ذخیره کنید. با این حال، این روش ممکن است برای کاراکترهایی که نمیتوان آنها را بهطور مستقیم با صفحهکلید تایپ کرد یا قابل مشاهده نیستند (مانند کاراکترهای کنترلی) مناسب نباشد.
مثال ۱: اختصاص کاراکتر یونیکد به متغیر
package com.tutorialspoint; public class UnicodeCharacterDemo { public static void main(String[] args) { // Storing Unicode character directly char unicodeChar = 'A'; // Directly storing the character 'A' System.out.println("Stored Unicode Character: " + unicodeChar); } }
کد بالا را کامپایل و اجرا کنید. این کد نتیجه زیر را تولید خواهد کرد:
خروجی
Stored Unicode Character: A
در این مثال، کاراکتر ‘A’ بهصورت مستقیم بین علامت نقل قول تکی قرار گرفته و به متغیر char
با نام unicodeChar
اختصاص داده شده است. سپس کاراکتر ذخیرهشده در خروجی چاپ میشود.
مثال ۲: اختصاص مقادیر یونیکد به متغیرها
package com.tutorialspoint; public class UnicodeCharacterDemo { public static void main(String[] args) { // Storing Unicode characters using escape sequences char letterA = '\u0041'; char letterSigma = '\u03A3'; char copyrightSymbol = '\u00A9'; // Storing Unicode characters directly char letterZ = 'Z'; char letterOmega = ''; char registeredSymbol = ''; // Printing the stored Unicode characters System.out.println("Stored Unicode Characters using Escape Sequences:"); System.out.println("Letter A: " + letterA); System.out.println("Greek Capital Letter Sigma: " + letterSigma); System.out.println("Copyright Symbol: " + copyrightSymbol); System.out.println("\nStored Unicode Characters Directly:"); System.out.println("Letter Z: " + letterZ); System.out.println("Greek Capital Letter Omega: " + letterOmega); System.out.println("Registered Symbol: " + registeredSymbol); } }
کد بالا را کامپایل و اجرا کنید. این کد نتیجه زیر را تولید خواهد کرد:
خروجی
کاراکترهای یونیکد ذخیرهشده با استفاده از توالیهای گریز:
حرف A: A
حرف بزرگ یونانی سیگما:
نماد کپیرایت:
کاراکترهای یونیکد ذخیرهشده بهصورت مستقیم:
حرف Z: Z
حرف بزرگ یونانی امگا:
نماد ثبتشده (Registered):
Stored Unicode Characters using Escape Sequences:
Letter A: A
Greek Capital Letter Sigma: Σ
Copyright Symbol: ©
Stored Unicode Characters Directly:
Letter Z: Z
Greek Capital Letter Omega:
Ω Registered Symbol: ®
مثال ۳: اختصاص کاراکترها و مقادیر یونیکد به متغیرها
این مثال نشان میدهد که چگونه میتوان کاراکترهای یونیکد ذخیرهشده را دستکاری کرد. در اینجا، اختلاف بین حرف بزرگ 'A'
و حرف کوچک 'a'
محاسبه میشود و از این اختلاف برای بهدست آوردن حرف بزرگ 'C'
استفاده میشود. سپس با افزودن عدد ۳۲ به کد یونیکد حرف بزرگ 'C'
، حرف کوچک 'c'
محاسبه میشود. کاراکترهای یونیکد دستکاریشده در خروجی چاپ میشوند.
package com.tutorialspoint; public class UnicodeCharacterDemo { public static void main(String[] args) { // Storing Unicode characters using escape sequences char letterA = '\u0041'; char letterSmallA = '\u0061'; // Storing Unicode characters directly char letterB = 'B'; // Manipulating the stored Unicode characters int difference = letterA - letterSmallA; char letterC = (char) (letterB + difference); char letterSmallC = (char) (letterC + 32); // Printing the manipulated Unicode characters System.out.println("Manipulated Unicode Characters:"); System.out.println("Difference between A and a: " + difference); System.out.println("Calculated Letter C: " + letterC); System.out.println("Calculated Letter c: " + letterSmallC); } }
کد بالا را کامپایل و اجرا کنید. این کد نتیجه زیر را تولید خواهد کرد:
خروجی
کاراکترهای یونیکد دستکاریشده:
اختلاف بین A و a: -32
حرف محاسبهشده C: "
حرف محاسبهشده c: B
Manipulated Unicode Characters:
Difference between A and a: -32
Calculated Letter C: "
Calculated Letter c: B
در جاوا، شما میتوانید کاراکترهای یونیکد را با استفاده از «لیترالهای کاراکتر» به دو روش ذخیره کنید:
- ۱. بهکارگیری توالیهای گریز یونیکد
- ۲. قرار دادن مستقیم کاراکترها بین علامتهای نقل قول تکی
هر دو روش مزایا و محدودیتهای خود را دارند. توالیهای گریز راهی یکپارچه برای نمایش هر کاراکتر یونیکد در کد منبع فراهم میکنند، در حالیکه ذخیرهسازی مستقیم کاراکترها زمانی راحتتر است که با کاراکترهایی سر و کار داریم که بهراحتی قابل تایپ یا نمایش هستند.این مقاله الگوریتمی برای ذخیره کاراکترهای یونیکد در جاوا ارائه داد، دو رویکرد متفاوت برای ذخیره این کاراکترها را مورد بررسی قرار داد، و برای هر روش مثالهای کاربردی نشان داد. درک این تکنیکها به توسعهدهندگان کمک میکند تا برنامههایی ایجاد کنند که بتوانند با زبانها و اسکریپتهای متنوع بهصورت یکپارچه کار کنند و از قدرت یونیکد در برنامهنویسی جاوا بهره ببرند.