ฉันพบว่าฉันมีปัญหากับวิธีการนี้เนื่องจากฉันพยายามเขียนผลลัพธ์ไปยังไฟล์และมันไม่ได้เข้ารหัสอย่างถูกต้อง ตั้งแต่ JS ดูเหมือนว่าจะใช้ UCS 2 การเข้ารหัส ( แหล่งที่มา , แหล่งที่มา ) เราต้องการที่จะยืดการแก้ปัญหานี้ขั้นตอนต่อไปนี่คือทางออกที่เพิ่มขึ้นของฉันที่ผลงานกับผม
ฉันไม่มีปัญหากับข้อความทั่วไป แต่เมื่อลงไปเป็นอาหรับหรือเกาหลีแล้วไฟล์เอาต์พุตไม่ได้มีตัวอักษรทั้งหมด แต่กลับแสดงอักขระข้อผิดพลาดแทน
ไฟล์ที่ส่งออก:
","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}
เดิม:
","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}
ฉันเอาข้อมูลจากวิธีแก้ปัญหาของเดนนิสและพบโพสต์นี้
นี่คือรหัสของฉัน:
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;
}
สิ่งนี้ทำให้ฉันสามารถบันทึกเนื้อหาไปยังไฟล์โดยไม่มีปัญหาการเข้ารหัส
วิธีการทำงาน: โดยทั่วไปจะใช้ชิ้นส่วน 8 ไบต์เดียวที่ประกอบด้วยอักขระ UTF-8 และบันทึกเป็นอักขระเดี่ยว (ดังนั้นอักขระ UTF-8 ที่สร้างขึ้นในลักษณะนี้อาจประกอบด้วย 1-4 ของอักขระเหล่านี้) UTF-8 เข้ารหัสอักขระในรูปแบบที่มีความยาวตั้งแต่ 1 ถึง 4 ไบต์ สิ่งที่เราทำที่นี่คือการเข้ารหัสต่อยในองค์ประกอบ URI แล้วนำองค์ประกอบนี้และแปลมันในตัวอักษร 8 ไบต์ที่สอดคล้องกัน ด้วยวิธีนี้เราจะไม่สูญเสียข้อมูลที่กำหนดโดยตัวอักษร UTF8 ที่มีความยาวมากกว่า 1 ไบต์
Int8Array
ArrayBufferView
มันอาจเป็นไปได้ที่จะใช้เครื่องหมายวงเล็บเพื่อคัดลอกตัวอักษรstring[i] = buffer[i]
และในทางกลับกัน