[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: filename(CJK utf8) problem on OSX.
From: |
Alex Vong |
Subject: |
Re: filename(CJK utf8) problem on OSX. |
Date: |
Mon, 28 Mar 2016 12:59:07 +0800 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Park SungMin <address@hidden> writes:
> follow code….. I just test openfile(CJK filename).
> "open-file" and "call-with-input-file" are raise error. so I test use low
> C(Posix) API, then run ok!
> I don’t know is it bug? or option problem?
>
>
> (use-modules (rnrs io ports)
> (rnrs bytevectors)
> (system foreign)
> (ice-9 rdelim))
>
> (fluid-set! %default-port-encoding "utf-8")
> (set-port-encoding! (current-output-port) "utf-8")
> (set-port-encoding! (current-input-port) "utf-8")
>
> (define filename "/Users/byul/Desktop/사진.gif")
>
> (define my-open-file
> (lambda (filename)
> (let* ((fd ((pointer->procedure
> int
> (dynamic-func "open" (dynamic-link))
> (list '* int))
> (bytevector->pointer
> (string->utf8 filename))
> O_RDONLY)))
> (when (= fd -1)
> (throw 'can't-find-file))
> (fdes->inport fd))))
>
> (define port (my-open-file filename))
>
> (get-bytevector-n port 10) ;; OK. I get bytevector.
>
> ;;but….
> (file-exists? filename) ;; #f
> (open-file filename "r") ; ERROR: In procedure open-file: No such file or
> directory: "/Users/byul/Desktop/사진.gif"
I cannot reproduce it on GNU/Linux. Perhaps others know what's going
wrong. For now, you could try setting port encoding to "UTF-8" instead
of "utf-8". Also, I remember OS X ships an ancient version of libiconv,
maybe you can try installing the latest version.
(use-modules (rnrs io ports)
(rnrs bytevectors)
(system foreign)
(ice-9 rdelim))
(fluid-set! %default-port-encoding "utf-8")
(set-port-encoding! (current-output-port) "utf-8")
(set-port-encoding! (current-input-port) "utf-8")
(define filename "/home/alexvong1995/사진.gif")
(system* "touch" filename) ;; create the file if not exist
;;; $1 = 0
(define my-open-file
(lambda (filename)
(let* ((fd ((pointer->procedure
int
(dynamic-func "open" (dynamic-link))
(list '* int))
(bytevector->pointer
(string->utf8 filename))
O_RDONLY)))
(when (= fd -1)
(throw 'can't-find-file))
(fdes->inport fd))))
(define port (my-open-file filename))
(get-bytevector-n port 10)
;;; $2 = #<eof>
(file-exists? filename)
;;; $3 = #t
(open-file filename "r")
;;; $4 = #<input: /home/alexvong1995/사진.gif 10>