#ruby-on-rails #encoding #utf-8 #gmail #ascii
#ruby-on-rails #кодирование #utf-8 #gmail #ascii
Вопрос:
Я использую новый API Gmail и абсолютно уверен в том, как правильно обрабатывать кодировку части [body] [data] в Ruby / Rails как для текстового / простого сообщения, так и для текстового / html-сообщения.
Допустим, данные = закодированная часть сообщения.
Вызов Base64.decode64(data).unpack("M")
возвращает текстовое тело в кодировке US-ASCII с большим количеством пропущенных символов, отображаемое на веб-странице.
Вызов Base64.decode64(data).encode('UTF-8')
выдает ошибку преобразования US-ASCII в UTF-8
Тем не менее, если я это сделаю Base64.decode64(data).encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'})
, я все еще вижу кучу вопросительных знаков.
Может кто-нибудь указать мне правильное направление в том, как правильно закодировать и отобразить тело сообщения в UTF-8?
Форматирование ответа электронной почты в формате JSON выглядит следующим образом:
"parts": [
{
"partId": "0",
"mimeType": "text/plain",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
Ответ №1:
Используется Base64.urlsafe_decode64
для декодирования тела сообщения.
Ответ №2:
var base64toUTF8 = function base64toUTF8(str,urlsafe) {
if(urlsafe) {
str = str.replace(/_/g,"/");
str = str.replace(/-/g," ");
}
if(typeof window) {
return decodeURIComponent(escape(window.atob( str )));
}
else if(typeof module !== 'undefined' amp;amp; module.exports) {
return new Buffer("SGVsbG8gV29ybGQ=", 'base64').toString('utf8');
}
};
просто нужно заменить символы в кодировке base64 ‘-‘ на ‘ ‘ и ‘_’ на ‘/’
Комментарии:
1. Это похоже на JavaScript, а не на Ruby.
Ответ №3:
Основываясь на ответе Бхаргава Кришны, вот версия, дружественная к NodeJS:
var base64toUTF8 = function base64toUTF8(str, urlsafe) {
if (urlsafe) {
str = str.replace(/_/g,"/");
str = str.replace(/-/g," ");
}
return new Buffer(str, 'base64').toString('utf8');
};
Я удалил ссылки на window vs module, а также сделал так, чтобы фактически использовался NodeJS str
, а не просто «Привет, мир!»
Комментарии:
1. Это похоже на JavaScript, а не на Ruby.