Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a POST with url elisp package in emacs: utf-8 problem

I'm currently creating a Rest client for making blog posts much in the spirit of pastie.el. The main objective is for me to write a textile in emacs and make a post to a Rails application that will create it. It is working fine until I type anything in either spanish or japanese, then I get a 500 error. pastie.el has this same problem also by the way.

Here is the code:

(require '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)))
              )))

The only way I can imagine right now that the problem could be fixed is by making emacs encode the utf-8 characters so that a 'ñ' becomes '&#241' (which works by the way).

What could be a work around for this problem?

EDIT: '*' is not equivalent to &ast;'. What I meant was that if I encoded to utf-8 with emacs using for example 'sgml-char' it would make the whole post become utf-8 encoded. Like &ast;Textile bold&ast; thus making RedCloth being unable to convert it into html. Sorry, it was very bad explained.

like image 588
wallyqs Avatar asked Feb 28 '23 09:02

wallyqs


1 Answers

A guess: does it work if you set url-request-data to

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

instead?

There's nothing really to tell url what coding system you use, so I guess you have to encode your data yourself. This should also give a correct Content-length header, as that just comes from (length url-request-data), which would obviously give the wrong result for most UTF-8 strings.

like image 83
legoscia Avatar answered Apr 09 '23 12:04

legoscia