Не можете прочитать файлы из корзины amazon s3, используя aws_s3 (ruby gem) в правильной кодировке? - PullRequest
5 голосов
/ 05 января 2012

У меня проблема при создании файла в кодировке 'utf-8' и чтении его из корзины amazon-s3.

Я создаю файл.

file = File.open('new_file', 'w', :encoding => 'utf-8')
string = "Some ££££ sings"
file.write(string)
file.close

При чтении из локальной сетивсе в порядке.

open('new_file').read
=> "Some ££££ sings"

Теперь я загружаю файл в amazon s3, используя aws_s3.

AWS::S3::S3Object.store('new_file', open('new_file'), 'my_bucket')
=> #<AWS::S3::S3Object::Response:0x2214462560 200 OK>

Когда я читаю из amazon s3

AWS::S3::S3Object.find('new_file', 'my_bucket').value
=> "Some \xC2\xA3\xC2\xA3\xC2\xA3\xC2\xA3 sings"

open(AWS::S3::S3Object.find('new_file','my_bucket').url).read
=> "Some \xC2\xA3\xC2\xA3\xC2\xA3\xC2\xA3 sings"

I 'Мы пробовали много вещей, которые до сих пор не нашли решения.

Большое спасибо за помощь

M

Ответы [ 2 ]

3 голосов
/ 06 января 2012

Я нашел решение на другом форуме.

Они могут сделать это, прежде всего, чтобы убедиться, что мы передаем / загружаем текстовый файл в utf-8.Само по себе это не решит проблему, но позволит вам с уверенностью использовать потоковое кодирование обратной строки.

open(AWS::S3::S3Object.find('new_file','my_bucket').url).read.force_encoding('utf-8')
0 голосов
/ 20 мая 2016

Я думаю, что есть лучшее решение. Поместите файл, в который вы пишете, в binmode .

file = File.open("test.txt", "wb")

# or use File#binmode
file = File.open("test.txt")
file.binmode

# binmode also works with Tempfile
file = Tempfile.new
file.binmode

# then proceed to downloading
s3 = AWS::S3.new
s3.buckets["foo"]["test.txt"].read do |chunk|
  file.write(chunk)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...