2017-09-03 4 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ではないので、注意してください。私は、必要ならば、いつも最初に提案したクルーギーに落ちることができます。しかし、sb-implに私に警告してくれてありがとう。他の多くの(おそらく一時的な、しかし私はチャンスを取る)良いものがそこにある。 –

関連する問題