2017-09-03 3 views
0

SBCL에 대한 모든 유효한 인코딩의 목록을 얻으려면 목록, 나는이 작업을 수행 :SBCL : 모든 유효한 문자 인코딩이

(let (encoding-list) 
    (let (symbol-list) 
    (do-external-symbols (s :keyword) 
     (push s symbol-list)) 
    (setf symbol-list (sort symbol-list #'string<)) 
    (mapc (lambda (x) 
      (when (ignore-errors 
        (with-open-file 
         (phyle "scratch1" 
         :direction  :output 
         :if-exists  :supersede 
         :external-format x) 
         1)) ; <-- produce something non-NIL 
       (push x encoding-list))) 
      symbol-list)) 
    (nreverse encoding-list)) 

SBCL에서이 작업을 수행하는 쉬운 방법이 있나요? 예를 들어 clisp에서 모든 인코딩은 CHARSET 패키지의 외부 기호입니다.

+2

목록이 필요한 용도는 무엇입니까? 매뉴얼에는 사용 가능한 것을보고 싶다면 [list] (http://www.sbcl.org/manual/#External-Formats)가 있습니다. 내부적으로 SBCL에는 모든 외부 형식을 포함하는 해시 테이블'SB-IMPL :: * EXTERNAL-FORMATS *'가있는 것으로 보입니다. – jkiiski

+0

@jkiiski : 저는 모든 형식을 탐색 할 수있는 LISP 프로그램을 작성하고 있습니다. 내 LISP 프로그램은 매뉴얼을 읽을 수 없다. 당신의 제안은 효과가 있었고 (놀랄 일도 아니지만) 매뉴얼과 같은 형식을 만들어 냈습니다. 진짜 살아있는 대답이라면, 받아 들일 수있어서 기쁩니다. 내 kludgey 방법은 "DEFAULT"를 포함한다는 점을 제외하면 동일한 출력을 생성합니다. –

답변

2

유일한 공식적인 목록은 the manual입니다. SBCL 내부를 조사하는 경우 외부 형식은 해시 표 SB-IMPL::*EXTERNAL-FORMATS*에 저장됩니다.

CL-USER> (alexandria:hash-table-keys sb-impl::*external-formats*) 
(:UTF32BE :UTF-32BE :UTF32LE :UTF-32LE :UTF16BE :UTF-16BE :UTF16LE :UTF-16LE 
:UCS4BE :UCS-4BE :UCS4LE :UCS-4LE :UCS2BE :UCS-2BE :UCS2LE :UCS-2LE :CP932 
:|Shift_JIS| :SJIS :SHIFT_JIS :|eucJP| :EUCJP :EUC-JP :CP936 :GBK :|macintosh| 
:MACINTOSH :|mac| :MAC :|MacRoman| :|mac-roman| :MAC-ROMAN :|windows-1258| 
:WINDOWS-1258 :|cp1258| :CP1258 :|windows-1257| :WINDOWS-1257 :|cp1257| 
:CP1257 :|windows-1256| :WINDOWS-1256 :|cp1256| :CP1256 :|windows-1255| 
:WINDOWS-1255 :|cp1255| :CP1255 :|cp1254| :CP1254 :|windows-1253| 
:WINDOWS-1253 :|cp1253| :CP1253 :|windows-1252| :WINDOWS-1252 :|cp1252| 
:CP1252 :|windows-1251| :WINDOWS-1251 :|cp1251| :CP1251 :|windows-1250| 
:WINDOWS-1250 :|cp1250| :CP1250 :ISO8859-15 :ISO-8859-15 :LATIN9 :LATIN-9 
:|latin-8| :LATIN-8 :|iso-8859-14| :ISO-8859-14 :|latin-7| :LATIN-7 
:|iso-8859-13| :ISO-8859-13 :|iso-8859-11| :ISO-8859-11 :|latin-6| :LATIN-6 
:|iso-8859-10| :ISO-8859-10 :|latin-5| :LATIN-5 :|iso-8859-9| :ISO-8859-9 
:|iso-8859-8| :ISO-8859-8 :|iso-8859-7| :ISO-8859-7 :|iso-8859-6| :ISO-8859-6 
:|iso-8859-5| :ISO-8859-5 :|latin-4| :LATIN-4 :|iso-8859-4| :ISO-8859-4 
:|latin-3| :LATIN-3 :|iso-8859-3| :ISO-8859-3 :|latin-2| :LATIN-2 
:|iso-8859-2| :ISO-8859-2 :|cp874| :CP874 :|cp869| :CP869 :|cp866| :CP866 
:|cp865| :CP865 :|cp864| :CP864 :|cp863| :CP863 :|cp862| :CP862 :|cp861| 
:CP861 :|cp860| :CP860 :|cp857| :CP857 :|cp855| :CP855 :|cp852| :CP852 
:|cp850| :CP850 :|cp437| :CP437 :|x-mac-cyrillic| :X-MAC-CYRILLIC :|koi8-u| 
:KOI8-U :|koi8-r| :KOI8-R :IBM037 :IBM-037 :|cp037| :CP037 :EBCDIC-US :UTF8 
:UTF-8 :ISO8859-1 :ISO-8859-1 :LATIN1 :LATIN-1 :|646| :ISO-646-US :ISO-646 
:ANSI_X3.4-1968 :US-ASCII :ASCII) 

물론 이것은 공개 API가 아니기 때문에 향후 릴리스에서 손상되지 않는다고 보장 할 수 없습니다.

+0

이것은 공개 API가 아니기 때문에주의 해 주시기 바랍니다. 필요하다면 나는 항상 첫 번째 제안 된 kludge로 돌아갈 수있다. 하지만 sb-impl에 대해서도 경고 해 주신 것에 대해 감사드립니다. 다른 많은 (아마 일시적인, 그러나 나는 나의 기회를 잡을 것이다) 거기의 즐거움. –

관련 문제