Bagaimana untuk menukar rentetan kepada format UTF-8 dalam JavaScript

PHPz
Lepaskan: 2023-04-05 14:57:00
asal
5157 orang telah melayarinya

Dalam pembangunan harian, kita selalunya perlu menukar rentetan ke dalam format UTF-8, kerana UTF-8 ialah kaedah pengekodan aksara universal yang menyokong aksara berbilang bahasa, termasuk bahasa Cina, Jepun, Korea, dsb. JavaScript ialah bahasa skrip yang biasa digunakan yang boleh membantu kami mencapai proses penukaran ini.

Artikel ini akan memperkenalkan cara menukar rentetan ke dalam format UTF-8 dalam JavaScript daripada aspek berikut:

  1. Ketahui tentang pengekodan UTF-8
  2. Tukar rentetan dengan cepat kepada UTF-8
  3. Lengkapkan penyelesaian transkoding UTF-8
  4. Fahami kaedah pengekodan UTF-8

UTF-8 ialah transformasi Pengekodan aksara panjang, peraturan pengekodannya adalah seperti berikut:

  • Untuk aksara bait tunggal, bit pertama bait ditetapkan kepada 0 dan 7 bit seterusnya ialah kod Unikod bagi aksara ini
  • Untuk aksara berbilang bait, n bit pertama bait pertama adalah semua 1, n+1 bit ialah 0, 2 bit pertama bait berikut semuanya ditetapkan kepada 10, dan baki 6 bit ialah kod Unikod bagi watak.

Contohnya, kod Unikod bagi aksara Cina "anda" ialah "U+4F60". pengekodan.

  1. Tukar rentetan dengan cepat kepada UTF-8

Dalam JavaScript, kami boleh menukar rentetan kepada format UTF-8 dengan mudah melalui fungsi pengekodan dan penyahkodan.

Yang pertama ialah fungsi pengekodan Kita boleh menggunakan fungsi encodeURIComponent() untuk menukar rentetan ke dalam format pengekodan URI, dan kemudian menyambung pengekodan URI setiap aksara ke dalam rentetan akhir dalam format UTF-8 kod sampel adalah seperti berikut :

function utf8Encode(str) {
  let encodedStr = encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {
    return String.fromCharCode(parseInt(p1, 16));
  });

  let utf8Str = "";
  for (let i = 0; i < encodedStr.length; i++) {
    let charCode = encodedStr.charCodeAt(i);
    if (charCode < 128) {
      utf8Str += String.fromCharCode(charCode);
    } else if (charCode < 2048) {
      utf8Str += String.fromCharCode((charCode >> 6) | 192);
      utf8Str += String.fromCharCode((charCode & 63) | 128);
    } else {
      utf8Str += String.fromCharCode((charCode >> 12) | 224);
      utf8Str += String.fromCharCode(((charCode >> 6) & 63) | 128);
      utf8Str += String.fromCharCode((charCode & 63) | 128);
    }
  }

  return utf8Str;
}
Salin selepas log masuk

Antaranya, fungsi encodeURIComponent() digunakan untuk menukar rentetan kepada pengekodan URI, dan fungsi replace() digunakan untuk menyambung pengekodan URI setiap aksara menjadi aksara akhir dalam format UTF-8.

Fungsi penyahkodan menggunakan fungsi decodeURIComponent() untuk menyahkod rentetan yang dikodkan Kod sampel adalah seperti berikut:

function utf8Decode(utf8Str) {
  let decodedStr = "";
  let i = 0;

  while (i < utf8Str.length) {
    let charCode = utf8Str.charCodeAt(i);
    if (charCode < 128) {
      decodedStr += String.fromCharCode(charCode);
      i++;
    } else if (charCode >= 192 && charCode < 224) {
      decodedStr += String.fromCharCode(((charCode & 31) << 6) | (utf8Str.charCodeAt(i + 1) & 63));
      i += 2;
    } else {
      decodedStr += String.fromCharCode(((charCode & 15) << 12) | ((utf8Str.charCodeAt(i + 1) & 63) << 6) | (utf8Str.charCodeAt(i + 2) & 63));
      i += 3;
    }
  }

  return decodeURIComponent(decodedStr);
}
Salin selepas log masuk
  1. Penyelesaian transcoding UTF-8 lengkap
  2. <.>
Walaupun fungsi di atas boleh menukar rentetan kepada format UTF-8, kaedah ini tidak begitu praktikal jika kita perlu mengubah kod rentetan dalam keseluruhan aplikasi web. Pada masa ini, kami boleh menggunakan perpustakaan pihak ketiga, seperti iconv-lite, untuk menyelesaikan tugas transcoding keseluruhan aplikasi Kod sampel adalah seperti berikut:

const iconv = require("iconv-lite");

let utf8Str = "欢迎使用 iconv-lite 库";

let buf = iconv.encode(utf8Str, "utf8"); // 转成 UTF-8 Buffer
let gbkStr = iconv.decode(buf, "gbk"); // 转成 GBK 编码字符串
Salin selepas log masuk
Dalam kod di atas, kami. gunakan fungsi iconv.encode() untuk menukar Tukar rentetan menjadi Penampan berkod UTF-8, dan kemudian gunakan fungsi iconv.decode() untuk menukar Penampan menjadi rentetan yang dikodkan sepadan. Perlu diingat bahawa untuk menggunakan perpustakaan iconv-lite, anda perlu memasangnya melalui npm terlebih dahulu Kaedah pemasangan ialah:

npm install iconv-lite
Salin selepas log masuk
Ringkasan

Artikel ini memperkenalkan cara menukar rentetan. ke dalam format UTF- 8. Kami belajar tentang kaedah pengekodan UTF-8, merealisasikan kaedah mudah untuk menukar rentetan kepada UTF-8 melalui fungsi pengekodan dan penyahkodan, dan memperkenalkan penggunaan perpustakaan iconv-lite untuk menyelesaikan tugas transcoding keseluruhan aplikasi. Dalam pembangunan sebenar, memilih kaedah yang sesuai berdasarkan keperluan sebenar dapat mengurangkan kos pembangunan dan meningkatkan kecekapan kerja.

Atas ialah kandungan terperinci Bagaimana untuk menukar rentetan kepada format UTF-8 dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan