"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفشل `atob` الخاص بـ Javascript في فك تشفير سلاسل UTF-8 base64 بشكل صحيح؟

لماذا يفشل `atob` الخاص بـ Javascript في فك تشفير سلاسل UTF-8 base64 بشكل صحيح؟

تم النشر بتاريخ 2024-11-09
تصفح:251

Why does Javascript\'s `atob` fail to decode UTF-8 base64 strings properly?

استخدام atob في Javascript لفك تشفير base64 لا يؤدي إلى فك تشفير سلاسل utf-8 بشكل صحيح

يمكن لـ atob في Javascript فك تشفير سلاسل base64 التي تم تشفيرها بشكل صحيح باستخدام أحرف ASCII، على سبيل المثال، سترجع window.atob('YQ==') حرف ASCII 'a'. ومع ذلك، لن يتمكن من فك تشفير سلاسل base64 التي تم ترميزها باستخدام أحرف UTF-8 Unicode بشكل صحيح، على سبيل المثال، window.atob('4pyTIMOgIGxhIG1vZGU=') سيرجع 'â ¢ à la mode' بدلاً من '✓ à la mode' .

لفك تشفير سلسلة base64 التي تم تشفيرها باستخدام UTF-8 بشكل صحيح، نحتاج إلى استخدام وظائف الهروب وإلغاء الهروب. في هذه الحالة، window.atob(unescape(encodeURIComponent('✓ à la mode'))) ستعيد '4pyTIMOgIGXhIG1vZGU=' و window.atob('4pyTIMOgIGxhIG1vZGU=') ستعيد '✓ à la mode'.

هناك خيار آخر للتعامل مع التدفق الوارد المشفر بـ base64 بحيث يتم فك تشفيره كـ utf-8 وهو استخدام فئة TextDecoder. توفر هذه الفئة طريقة لفك تشفير سلسلة مشفرة بـ base64 إلى سلسلة UTF-8. فيما يلي مثال لكيفية استخدامه:

const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3