✍️ رمزگذاری مشخص میکند نویسههای متن چطور به داده قابل ذخیره تبدیل شوند. برای فارسی و متن چندزبانه، UTF-8 انتخاب مناسبی است، اما باید در هر دو سمت نوشتن و خواندن صریح باشد. تکیه بر تنظیم پیشفرض دستگاه ممکن است یک مثال را روی یک سیستم درست و روی سیستم دیگر خراب کند.
مثلاً جمله «فروش امروز: ۲ دفتر» باید بعد از رفتوبرگشت فایل دقیقاً همان جمله بماند. فاصله، نشانه دونقطه و رقم فارسی جزو متناند. اگر دور متن فاصله باشد یا در انتهایش خط خالی باشد، نباید صرفاً برای زیباتر شدن نتیجه حذفشان کنیم؛ هدف این فعالیت حفظ بیکموکاست داده است.
این بار تابع را از صفر بساز: پوشه موقت، مسیر فایل، بلوک نوشتن، بلوک خواندن و بازگشت نتیجه. tempfile و pathlib جزو کتابخانه استانداردند و کد اولیه واردشان کرده است. خطای رایج، اجرای strip روی نتیجه یا تبدیل فارسی به نوشتار لاتین است؛ هیچکدام در قرارداد خواسته نشده. متن خالی هم یک محتوای معتبر است و باید بتواند نوشته و دوباره خوانده شود. از فایل موجود در سیستم خودت استفاده نکن؛ آرگومان تابع تنها منبع داده نمونه است.
در این تمرین پایان خطهای احتمالی ورودی فقط LF یعنی \n، مثل مثالها، هستند؛ ورودی با \r یا \r\n داده نمیشود.
فعالیت شما
تابع persian_roundtrip(text) رشته را داخل فایل موقت به نام persian.txt با encoding='utf-8' بنویسد و با همین encoding بخواند؛ خروجی دقیقاً متن خواندهشده باشد. هیچ strip یا تغییر نویسه انجام نده. خالی، فاصله دو سر و چند خط معتبرند؛ persian_roundtrip('سلام ایران')='سلام ایران'. فایل باید در همین فراخوانی ساخته شود. در این تمرین پایان خطهای احتمالی ورودی فقط LF یعنی \n، مثل مثالها، هستند؛ ورودی با \r یا \r\n داده نمیشود.