تم تصميم وظيفة atob () في JavaScript لفك تشفير السلاسل المشفرة بـ base64. قد يواجه المستخدمون مشكلات عند فك تشفير السلاسل المشفرة بترميز UTF-8، مما يؤدي إلى ظهور أحرف بترميز ASCII بدلاً من تمثيل UTF-8 الصحيح.
يتوقع Base64 البيانات الثنائية كمدخلات وتعتبر JavaScript السلاسل التي تحتوي على أحرف تشغل بايتًا واحدًا بمثابة بيانات ثنائية. ومع ذلك، فإن الأحرف التي تشغل أكثر من بايت واحد في السلاسل المشفرة بترميز UTF-8، تؤدي إلى حدوث استثناءات أثناء التشفير.
الإصلاح الموصى به هو تشفير السلاسل الثنائية وفك تشفيرها:
ترميز UTF-8 إلى ثنائي
function toBinary(string) { const codeUnits = new Uint16Array(string.length); for (let i = 0; iفك التشفير الثنائي إلى UTF-8
وظيفة من Binary (مشفر) { const ثنائي = atob(encoded); بايتات const = new Uint8Array(binary.length); من أجل (دع i = 0؛ i function fromBinary(encoded) { const binary = atob(encoded); const bytes = new Uint8Array(binary.length); for (let i = 0; i يقوم هذا الحل بتحويل سلسلة UTF-8 الأصلية إلى تمثيل ثنائي، مع الحفاظ على ترميز UTF-16، وهو تمثيل أصلي في JavaScript.الحل 2: إمكانية التشغيل التفاعلي لـ ASCII Base64الحل البديل الذي يركز على قابلية التشغيل التفاعلي UTF-8 هو الحفاظ على سلاسل base64 للنص العادي:ترميز UTF-8 إلى Base64
وظيفة b64EncodeUnicode(str) { إرجاع btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, الدالة toSolidBytes(match, p1) { return String.fromCharCode('0x' p1); }));function b64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) { return String.fromCharCode('0x' p1); })); }فك تشفير Base64 إلى UTF-8 الدالة b64DecodeUnicode(str) { إرجاع decodeURIComponent(atob(str).split('').map(function(c) { إرجاع '%' ('00' c.charCodeAt(0).toString(16)).slice(-2); }).ينضم(''))؛
function b64DecodeUnicode(str) { return decodeURIComponent(atob(str).split('').map(function(c) { return '%' ('00' c.charCodeAt(0).toString(16)).slice(-2); }).join('')); }دعم TypeScript
// ترميز UTF-8 ⇢ base64 الدالة b64EncodeUnicode(str) { إرجاع btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { إرجاع String.fromCharCode(parseInt(p1, 16)) })) } // فك تشفير base64 ⇢ UTF-8 الدالة b64DecodeUnicode(str) { إرجاع decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { إرجاع '%' ('00' c.charCodeAt(0).toString(16)).slice(-2) }).ينضم(''))
// Encoding UTF-8 ⇢ base64 function b64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { return String.fromCharCode(parseInt(p1, 16)) })) } // Decoding base64 ⇢ UTF-8 function b64DecodeUnicode(str) { return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) { return '%' ('00' c.charCodeAt(0).toString(16)).slice(-2) }).join('')) }الدالة utf8_to_b64( str ) { return window.btoa(unescape(encodeURIComponent( str ))); } الدالة b64_to_utf8(ستر) { return decodeURIComponent(escape(window.atob( str )));
function utf8_to_b64( str ) { return window.btoa(unescape(encodeURIComponent( str ))); } function b64_to_utf8( str ) { return decodeURIComponent(escape(window.atob( str ))); }
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3