"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية فك تشفير سلاسل Base64 في جافا سكريبت أثناء التعامل مع ترميز UTF-8؟

كيفية فك تشفير سلاسل Base64 في جافا سكريبت أثناء التعامل مع ترميز UTF-8؟

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

How to Decode Base64 Strings in JavaScript While Handling UTF-8 Encoding?

فك تشفير Base64 باستخدام وظيفة JavaScript atob: التعامل مع UTF-8

تم تصميم وظيفة atob () في JavaScript لفك تشفير السلاسل المشفرة بـ base64. قد يواجه المستخدمون مشكلات عند فك تشفير السلاسل المشفرة بترميز UTF-8، مما يؤدي إلى ظهور أحرف بترميز ASCII بدلاً من تمثيل UTF-8 الصحيح.

التحدي: فهم مشكلة Unicode

يتوقع Base64 البيانات الثنائية كمدخلات وتعتبر JavaScript السلاسل التي تحتوي على أحرف تشغل بايتًا واحدًا بمثابة بيانات ثنائية. ومع ذلك، فإن الأحرف التي تشغل أكثر من بايت واحد في السلاسل المشفرة بترميز UTF-8، تؤدي إلى حدوث استثناءات أثناء التشفير.

الحل 1: إمكانية التشغيل البيني الثنائي

الإصلاح الموصى به هو تشفير السلاسل الثنائية وفك تشفيرها:

ترميز 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