Я виявив, що у мене виникли проблеми з таким підходом, в основному тому, що я намагався записати вихід у файл, і він не був закодований належним чином. Оскільки, схоже, 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}
Я взяв інформацію з рішення dennis і цю посаду я знайшов.
Ось мій код:
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]
та навпаки.