Интерпретация нелатинских символов в Синатре из Mac Excel 2011 - PullRequest
1 голос
/ 03 мая 2011

У меня есть скрипт Mac VBA, который отправляет запрос в веб-приложение Ruby Sinatra.

Текст, передаваемый из Excel, содержит такие символы, как é. Ruby (версия 1.9.2) заглушает эти символы, поскольку Excel не отправляет их как UTF-8.

# encoding: utf-8
require 'rubygems'

require 'sinatra'
require "sinatra/reloader" if development?

configure do
  class << Sinatra::Base
    def options(path, opts={}, &block)
      route 'OPTIONS', path, opts, &block
    end
  end
  Sinatra::Delegator.delegate :options
end

options '/' do
  response.headers["Access-Control-Allow-Origin"] = "*"
  response.headers["Access-Control-Allow-Methods"] = "POST"

  halt 200
end

post '/fetch' do
  chars = []
  params['excel_input'].valid_encoding?  #returns false
  params['excel_input']
end

Мой Excel VBA:

Sub FetchAddress()
    For Each oDest In Selection
        With ActiveSheet.QueryTables.Add(Connection:="URL;http://localhost:4567/fetch", Destination:=oDest)
            .PostText = "excel_input=" & oDest.Offset(0, -1).Value
            .RefreshStyle = xlOverwriteCells
            .SaveData = True
            .Refresh
        End With
    Next
End Sub

Персонаж é выходит на другой конец как Ž.

Похоже, что текст в Excel закодирован как Windows-1252 http://en.wikipedia.org/wiki/Windows-1252.

Представление символа в байтах равно 142 (или Ž в Windows-1252).

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Вы также можете, вероятно, взглянуть на: https://github.com/jmhodges/rchardet, затем вы можете автоматически определить кодировку и затем преобразовать ее в utf-8.

1 голос
/ 03 мая 2011

iconv может преобразовать ввод в UTF-8.Он преобразует кодировку символов из одной кодировки в другую.Так что-то вроде этого должно работать:

require "iconv"
...
post '/fetch' do
  excel_input = Iconv.conv("UTF-8", "WINDOWS-1252", params['excel_input'])
  ...
end
0 голосов
/ 03 мая 2011

Ruby 1.9 Кодировки: учебник для начинающих и решение для Rails - yehuda katz - хорошее чтение. Если у вас есть время. Подробно расскажем о кодировках и способах их преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...