2009-08-26 2 views
4

저는 pastie.el의 정신으로 블로그 게시물을 만들기위한 휴식 클라이언트를 만들고 있습니다. 주된 목적은 이맥스에 텍스타일을 작성하고 레일스 애플리케이션을 만들 포스트를 만드는 것이다. 내가 스페인어 나 일본어 중 하나를 입력하기 전까지는 잘 작동합니다. 그런 다음 500 오류가 발생합니다. pastie.el도이 같은 문제를 가지고 있습니다. 여기 emacs : utf-8 문제에 url elisp 패키지로 POST 만들기

코드입니다 :

이 (필요 'URL)

(defun create-post() 

(interactive) 

(let ((url-request-method "POST") 

    (url-request-extra-headers '(("Content-Type" . "application/xml"))) 

    (url-request-data (concat "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
           "<post>" 
           "<title>" 
           "Not working with spanish nor japanese" 
           "</title>" 
           "<content>" 
           ;; "日本語" ;; not working 
           ;; "ñ"  ;; not working either 
           "h1. Textile title\n\n" 
           "*Textile bold*" 
           "</content>" 
           "</post>")) 
    )        ; end of let varlist 
(url-retrieve "http://127.0.0.1:3000/posts.xml" 
       ;; CALLBACK 
       (lambda (status) 
       (switch-to-buffer (current-buffer))) 
      ))) 

내가 지금 문제가 해결 될 수 있다는 것을 상상할 수있는 유일한 방법은 이맥스 그래서 UTF-8 문자를 인코딩하여입니다 'ñ'는 '& # 241'이됩니다 (어떤 방식 으로든 작동합니다).

이 문제의 해결 방법은 무엇입니까?

편집 : '*'는 * '과 (와) 일치하지 않습니다. 내가 말한 의미는 예를 들어 'sgml-char'을 사용하여 이맥스로 utf-8로 인코딩하면 전체 게시물이 utf-8로 인코딩되게됩니다. 마찬가지로 * 섬유 굵은 글꼴 * 이렇게하면 RedCloth에서 html로 변환 할 수 없습니다. 미안 해요, 아주 잘못 설명했습니다.

+0

Emacs 버전? 응용 프로그램/xml 없음 헤더? 그리고 마지막으로 *과 *가 연결의 다른 쪽에서 동일하지 않으면 XML을 사용하고 있지 않습니다. – jrockway

+0

아참. xml 헤더를 추가했습니다. Emacs 23.0을 사용하고 있습니다. 감사. – wallyqs

+0

에 대해 확실한 *은 *? 전에는 본 적이 없으며 XML의 5 가지 필수 엔티티 중 하나가 아닙니다. Emacs가 생성하면 버그라고 말할 수 있습니다. – legoscia

답변

6

추측 : 당신이 url-request-data 대신

(encode-coding-string (concat "<?xml etc...") 'utf-8) 

로 설정하면 작동합니까?

실제로 URL을 알려주는 용도는 없으므로 데이터를 직접 인코딩해야합니다. 또한 올바른 Content-length 헤더를 제공해야합니다. 이는 단지 (length url-request-data)에서 발생하며, 이는 대부분의 UTF-8 문자열에 대해 잘못된 결과를 제공합니다.

+0

tttttt 감사합니다 !!! 이것이 그랬다. 지식을 공유해 주셔서 감사합니다! – wallyqs

2

@legoscia에게 감사드립니다. 이제 데이터를 직접 인코딩해야합니다. 나중에 참조 할 수 있도록 여기에 함수를 게시합니다.

(require 'url) 

(defun create-post() 
(interactive) 
(let ((url-request-method "POST") 
    (url-request-extra-headers '(("Content-Type" . "application/xml; charset=utf-8"))) 
    (url-request-data 
    (encode-coding-string (concat "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"         
            "<post>" 
            "<title>" 
            "Not working with spanish nor japanese" 
            "</title>" 
            "<content>" 
            "日本語\n\n" ;; working!!! 
            "ñ\n\n"  ;; working !!! 
            "h1. Textile title\n\n" 
            "*Textile bold*" 
            "</content>" 
            "</post>") 'utf-8) 
    ) 
    )        ; end of let varlist 
(url-retrieve "http://127.0.0.1:3000/posts.xml" 
       ;; CALLBACK 
       (lambda (status) 
       (switch-to-buffer (current-buffer)) 
       ))))     ;let