این دستور perlunitut است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
perlunitut - آموزش پرل یونیکد
شرح
روزهای پرتاب کردن رشته ها به پایان رسیده است. به خوبی ثابت شده که مدرن است
برنامه ها باید قادر به برقراری ارتباط با حروف لهجه خنده دار و چیزهایی مانند یورو باشند
نمادها این بدان معناست که برنامه نویسان به عادت های جدید نیاز دارند. برنامه نویسی با قابلیت یونیکد آسان است
نرم افزار، اما برای انجام درست آن نیاز به نظم و انضباط دارد.
چیزهای زیادی برای دانستن در مورد مجموعه کاراکترها و رمزگذاری متن وجود دارد. احتمالاً بهتر است
یک روز کامل را صرف یادگیری همه اینها کنید، اما اصول اولیه را می توان در چند دقیقه یاد گرفت.
اگرچه اینها خیلی اصولی نیستند. فرض بر این است که شما قبلاً تفاوت را می دانید
بین بایت ها و کاراکترها، و درک کنید (و بپذیرید!) که بسیار متفاوت هستند
مجموعه کاراکترها و کدگذاری ها، و اینکه برنامه شما باید در مورد آنها صریح باشد.
مطالعه توصیه شده این است "حداقل مطلق هر توسعه دهنده نرم افزار، مطلقا،
باید درباره یونیکد و مجموعه شخصیت ها بدانید (بدون بهانه!)" نوشته جوئل اسپولسکی، در
<http://joelonsoftware.com/articles/Unicode.html>.
این آموزش به صورت کاملاً مطلق صحبت می کند و فقط یک نمای محدود از آن ارائه می دهد
انبوهی از ویژگی های مرتبط با رشته کاراکتر که پرل ارائه می دهد. برای اکثر پروژه ها،
این اطلاعات احتمالا کافی خواهد بود.
تعاریف
مهم است که ابتدا چند چیز را مشخص کنید. این مهمترین بخش این است
آموزش این نما ممکن است با اطلاعات دیگری که ممکن است در آن پیدا کرده باشید مغایرت داشته باشد
وب، اما بیشتر به این دلیل است که بسیاری از منابع اشتباه هستند.
ممکن است مجبور شوید کل این بخش را چند بار دوباره بخوانید...
یونیکد
یونیکد مجموعه ای از شخصیت ها با فضایی برای تعداد زیادی شخصیت است. مقدار ترتیبی a
شخصیت a نامیده می شود رمز نقطه. (اما در عمل، تمایز بین نقطه کد
و کاراکتر تار است، بنابراین اصطلاحات اغلب به جای هم استفاده می شوند.)
نقاط کد بسیار بسیار زیادی وجود دارد، اما کامپیوترها با بایت ها کار می کنند و یک بایت جا دارد
فقط 256 مقدار یونیکد کاراکترهای بسیار بیشتری از آن دارد، بنابراین برای ساختن به روشی نیاز دارید
اینها در دسترس هستند
یونیکد با استفاده از چندین رمزگذاری رقیب کدگذاری می شود که UTF-8 بیشترین استفاده را دارد. که در
یک رمزگذاری یونیکد، چندین بایت بعدی را می توان برای ذخیره یک نقطه کد استفاده کرد، یا
به سادگی: شخصیت
UTF-8
UTF-8 یک رمزگذاری یونیکد است. بسیاری از مردم فکر می کنند که Unicode و UTF-8 یک چیز هستند،
اما آنها نیستند. رمزگذاری های یونیکد بیشتری وجود دارد، اما بسیاری از نقاط جهان استاندارد شده اند
در UTF-8.
UTF-8 با 128 کد اول، 0..127، مانند ASCII رفتار می کند. آنها فقط یک بایت می گیرند
در هر شخصیت همه کاراکترهای دیگر با استفاده از یک کمپلکس به صورت دو تا چهار بایت کدگذاری می شوند
طرح. خوشبختانه، پرل این کار را برای ما انجام می دهد، بنابراین لازم نیست نگران این موضوع باشیم.
متن رشته های (شخصیت رشته های)
متن رشته های، یا شخصیت رشته های از شخصیت ها ساخته شده اند. بایت ها در اینجا بی ربط هستند، و
رمزگذاری ها نیز همینطور هستند. هر شخصیت فقط همین است: شخصیت.
در یک رشته متن، کارهایی مانند زیر را انجام می دهید:
$text =~ s/foo/bar/;
if ($string =~ /^\d+$/) { ... }
$text = ucfirst $text;
من $character_count = طول $text;
مقدار یک کاراکتر ("ord"، "chr") نقطه کد یونیکد مربوطه است.
دوتایی رشته های (بایت رشته های)
دوتایی رشته های، یا بایت رشته های از بایت ساخته شده اند. در اینجا، شما شخصیت ندارید، فقط
بایت ها تمام ارتباطات با دنیای خارج (هر چیزی خارج از پرل فعلی شما
فرآیند) به صورت باینری انجام می شود.
در یک رشته باینری، کارهایی مانند:
my (@length_content) = بسته بندی "(V/a)*"، $binary;
$binary =~ s/\x00\x0F/\xFF\xF0/; # برای شجاعان :)
چاپ {$fh} $دودویی;
my $byte_count = طول $دودویی;
رمز گذاری
رمز گذاری (به عنوان فعل) تبدیل از متن به دوتایی. برای رمزگذاری، باید عرضه کنید
رمزگذاری هدف، به عنوان مثال "iso-8859-1" یا "UTF-8". برخی از رمزگذاری ها، مانند
محدوده "iso-8859" ("لاتین")، از استاندارد کامل یونیکد پشتیبانی نمی کند. شخصیت هایی که
نمی تواند نشان داده شود در تبدیل گم می شوند.
رمز گشایی
رمز گشایی تبدیل از است دوتایی به متن. برای رمزگشایی، باید بدانید کدگذاری چیست
در مرحله رمزگذاری استفاده شد. و مهمتر از همه، باید چیزی قابل رمزگشایی باشد. آی تی
رمزگشایی یک تصویر PNG به یک رشته متنی چندان منطقی نیست.
داخلی قالب
پرل دارای یک داخلی قالب، رمزگذاری است که از آن برای رمزگذاری رشته های متنی استفاده می کند تا بتواند
آنها را در حافظه ذخیره کنید تمام رشته های متنی در این قالب داخلی هستند. در واقع رشته های متنی
هرگز در قالب دیگری نیستند!
شما نباید نگران این باشید که این فرمت چیست، زیرا تبدیل به صورت خودکار انجام می شود
وقتی رمزگشایی یا رمزگذاری می کنید.
شما جدید ابزار
خط زیر را به عنوان استاندارد خود اضافه کنید:
استفاده از Encode qw (encode decode)؛
یا اگر تنبل هستید، فقط:
از Encode استفاده کنید.
I / O جریان ( واقعی 5 دقیقه آموزش)
جریان ورودی/خروجی معمول یک برنامه به صورت زیر است:
1. دریافت و رمزگشایی
2 روند
3. رمزگذاری و خروجی
اگر ورودی شما باینری است و قرار است باینری باقی بماند، نباید آن را به یک رمزگشایی کنید.
البته رشته متنی اما در تمام موارد دیگر، شما باید آن را رمزگشایی کنید.
اگر ندانید که چگونه داده ها رمزگذاری شده اند، رمزگشایی نمی تواند به طور قابل اعتمادی اتفاق بیفتد. اگر به
انتخاب کنید، ایده خوبی است که روی UTF-8 استانداردسازی کنید.
my $foo = رمزگشایی ('UTF-8'، دریافت 'http://example.com/')؛
my $bar = decode('ISO-8859-1', readline STDIN);
my $xyzzy = decode('Windows-1251', $cgi->param('foo'));
پردازش همانطور که قبلا می دانستید اتفاق می افتد. تنها تفاوت این است که شما اکنون از آن استفاده می کنید
کاراکتر به جای بایت اگر از چیزهایی مانند "substr" یا "substr" استفاده کنید، بسیار مفید است
"طول".
مهم است که بدانیم هیچ بایتی در یک رشته متنی وجود ندارد. البته پرل دارد
رمزگذاری داخلی آن برای ذخیره رشته در حافظه است، اما آن را نادیده بگیرید. اگر باید انجام دهید
هر چیزی که تعداد بایت ها را داشته باشد، احتمالاً بهتر است آن قسمت را فقط به مرحله 3 منتقل کنید
پس از اینکه رشته را رمزگذاری کردید. سپس می دانید که دقیقاً چند بایت خواهد بود
رشته مقصد
نحو برای رمزگذاری رشته های متنی به رشته های باینری به سادگی رمزگشایی است:
$body = encode('UTF-8', $body);
اگر لازم بود طول رشته را بر حسب بایت بدانید، اکنون زمان مناسبی برای آن است.
از آنجایی که $body اکنون یک رشته بایت است، "length" به جای اینکه تعداد بایت ها را گزارش کند
تعداد کاراکترها تعداد کاراکترها دیگر مشخص نیست، زیرا کاراکترها
فقط در رشته های متنی وجود دارد.
$byte_count من = طول $body;
و اگر پروتکلی که استفاده میکنید از روشی پشتیبانی میکند که به گیرنده اطلاع دهید
رمزگذاری کاراکتری که استفاده کردید، لطفاً با استفاده از آن ویژگی به گیرنده کمک کنید! برای
به عنوان مثال، ایمیل و HTTP از هدرهای MIME پشتیبانی می کنند، بنابراین می توانید از هدر "Content-Type" استفاده کنید.
آنها همچنین می توانند "Content-Length" را برای نشان دادن تعداد داشته باشند بایت، که همیشه یک است
ایده خوبی است که در صورت مشخص بودن تعداد، عرضه کنید.
"Content-Type: text/plain; charset=UTF-8"،
"طول محتوا: $byte_count"
خلاصه
هر چیزی را که دریافت می کنید رمزگشایی کنید، هر چیزی را که ارسال می کنید رمزگذاری کنید. (اگر داده های متنی باشد.)
Q و A (و یا پرسش و پاسخ)
پس از خواندن این سند، باید perlunifaq و سپس perluniintro را نیز بخوانید.
تقدیرنامه ها
با تشکر از Johan Vromans از Squirrel Consultancy. UTF-8 او در طول آمستردام ناله می کند
جلسات پرل مونگرز مرا علاقه مند و مصمم به یافتن چگونگی استفاده از شخصیت کرد
رمزگذاری در پرل به روشی که به راحتی خراب نمی شود.
با تشکر از جرارد گوسن از TTY. ارائه او "UTF-8 در طبیعت" (هلندی پرل
کارگاه 2006) به من انگیزه داد تا افکارم را منتشر کنم و این آموزش را بنویسم.
با تشکر از افرادی که در مورد این نوع مطالب در چندین کانال IRC پرل پرسیدند، و
مدام به من یادآوری می کنند که توضیح ساده تری لازم است.
از افرادی که این سند را قبل از انتشار عمومی برای من بررسی کردند، تشکر می کنم. آن ها هستند:
بنجامین اسمیت، یان پیتر کورنت، یوهان ورومانز، لوکاس مای، ناتان گری.
با استفاده از خدمات onworks.net از perlunitut به صورت آنلاین استفاده کنید