Tôi thấy tôi có vấn đề với cách tiếp cận này, về cơ bản vì tôi đang cố ghi đầu ra vào một tệp và nó không được mã hóa đúng cách. Vì JS dường như sử dụng mã hóa UCS-2 ( nguồn , nguồn ), chúng tôi cần kéo dài giải pháp này thêm một bước nữa, đây là giải pháp nâng cao của tôi hoạt động với tôi.
Tôi không gặp khó khăn với văn bản chung chung, nhưng khi nó xuống tiếng Ả Rập hoặc tiếng Hàn, tệp đầu ra không có tất cả các ký tự mà thay vào đó là hiển thị các ký tự lỗi
Đầu ra tệp:
","10k unit":"",Follow:"Õ©íüY‹","Follow %{screen_name}":"%{screen_name}U“’Õ©íü",Tweet:"ĤüÈ","Tweet %{hashtag}":"%{hashtag} ’ĤüÈY‹","Tweet to %{name}":"%{name}U“xĤüÈY‹"},ko:{"%{followers_count} followers":"%{followers_count}…X \Ì","100K+":"100Ì tÁ","10k unit":"Ì è",Follow:"\°","Follow %{screen_name}":"%{screen_name} Ø \°X0",K:"œ",M:"1Ì",Tweet:"¸","Tweet %{hashtag}":"%{hashtag}
Nguyên:
","10k unit":"万",Follow:"フォローする","Follow %{screen_name}":"%{screen_name}さんをフォロー",Tweet:"ツイート","Tweet %{hashtag}":"%{hashtag} をツイートする","Tweet to %{name}":"%{name}さんへツイートする"},ko:{"%{followers_count} followers":"%{followers_count}명의 팔로워","100K+":"100만 이상","10k unit":"만 단위",Follow:"팔로우","Follow %{screen_name}":"%{screen_name} 님 팔로우하기",K:"천",M:"백만",Tweet:"트윗","Tweet %{hashtag}":"%{hashtag}
Tôi lấy thông tin từ giải pháp của dennis và bài đăng này tôi tìm thấy.
Đây là mã của tôi:
function encode_utf8(s) {
return unescape(encodeURIComponent(s));
}
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
function ab2str(buf) {
var s = String.fromCharCode.apply(null, new Uint8Array(buf));
return decode_utf8(decode_utf8(s))
}
function str2ab(str) {
var s = encode_utf8(str)
var buf = new ArrayBuffer(s.length);
var bufView = new Uint8Array(buf);
for (var i=0, strLen=s.length; i<strLen; i++) {
bufView[i] = s.charCodeAt(i);
}
return bufView;
}
Điều này cho phép tôi lưu nội dung vào một tệp mà không gặp sự cố mã hóa.
Cách thức hoạt động: Về cơ bản, nó lấy các đoạn 8 byte đơn tạo thành một ký tự UTF-8 và lưu chúng thành các ký tự đơn (do đó, một ký tự UTF-8 được xây dựng theo cách này, có thể được tạo bởi 1-4 các ký tự này). UTF-8 mã hóa các ký tự theo định dạng có độ dài thay đổi từ 1 đến 4 byte. Những gì chúng ta làm ở đây là mã hóa sting trong một thành phần URI và sau đó lấy thành phần này và dịch nó theo ký tự 8 byte tương ứng. Theo cách này, chúng tôi không mất thông tin được cung cấp bởi các ký tự UTF8 dài hơn 1 byte.
Int8Array
ArrayBufferView
có thể sử dụng ký hiệu ngoặc đơn để sao chép ký tựstring[i] = buffer[i]
và ngược lại.