2011-05-03 3 views
1

Excel 2011, Ruby 1.9.2/Sintra 및 문자 인코딩에서 VBA를 해결할 수있는 사람은 누구입니까?Sinatra의 비 라틴어 문자를 Mac Excel 2011에서 보냄

Ruby Sinatra 웹 앱에 요청하는 Mac VBA 스크립트가 있습니다. Excel에서 전달하는 텍스트에 é 같은 문자가 포함되어 있습니다. 불행히도 루비 (버전 1.9.2)는 Excel이 UTF-8로 그들을 보내지 않기 때문에이 문자들에 비참하게 질식합니다.

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 

문자 é z는 등의 다른 쪽 끝을 나오는 다음과 같이

# 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 

는 그리고 내 엑셀 VBA입니다. Excel에서 텍스트 창-1252 http://en.wikipedia.org/wiki/Windows-1252 최종 SNIP로 인코딩처럼

SNIP 그것은 그것은 루비처럼 보이는

텍스트를 윈도우 1252의 z 따라서 인쇄이라고 생각 보인다.

문자의 바이트 표현은 142입니다 (또는 windows-1252에서 Ž). 문제는 처음부터 Excel에서 나에게 전송되는 인코딩을 모른다는 것입니다.

답변

1

iconv는 입력을 UTF-8로 변환 할 수 있습니다. 문자 인코딩을 한 인코딩에서 다른 인코딩으로 변환합니다. 이렇게하면 다음과 같이 작동해야합니다.

require "iconv" 
... 
post '/fetch' do 
    excel_input = Iconv.conv("UTF-8", "WINDOWS-1252", params['excel_input']) 
    ... 
end 
+0

싫어했습니다. 나는 문제가 텍스트가 들어오는 것이 아니라고 생각한다.-1252 ... 어떤 인코딩이 들어 오는지 전혀 모른다. – ewalk

+0

위 코드의 두 가지 문제점 : 1. UTF8은 UTF-8이어야합니다. 2. 매개 변수의 순서는 TO, FROM이어야합니다. – ewalk

+0

이것은 내가 필요한 것에 나를 데려 가기에 충분했다. 나는 입력이 MACROMAN으로 들어오는 것을 알았다. 아아, 여전히 Excel로 제대로 인쇄 할 수 없습니다. – ewalk

관련 문제