(and openmcl openmcl-unicode-strings))
(pushnew 'no-i18n cl:*features*)
-(defvar *default-external-character-encoding*
+(defvar *default-foreign-encoding*
nil
- "Normalized name of default external character encoding to use
+ "Normalized name of default external character format to use
for foreign string conversions. nil means use implementation default
encoding.")
-(defvar *external-encoding-mapping*
+(defvar *foreign-encoding-mapping*
#+(and lispworks unicode)
'((:ascii . :ascii) (:latin-1 . :latin-1) (:ucs-2 . :unicode)
(:utf-8 . :utf-8) (:jis . :jis) (:sjis . :sjis) (:gbk . :gbk))
(:gbk . charset:gbk) (:euc-jp . charset:euc-jp))
#+(and openmcl openmcl-unicode-strings)
'((:ascii . :ascii) (:latin-1 . :iso-8859-1) (:utf-8 . :utf-8)
- (:ucs-2 . :ucs-2) (:euc-jp . :euc-jp))
+ (:ucs-2 . :ucs-2)
+ #+nil (:euc-jp . :euc-jp)
+ )
#-(or (and lispworks unicode) (and sbcl sb-unicode)
(and allegro ics) (and clisp unicode)
(and openmcl openmcl-unicode-strings))
nil
- "Mapping between normalized external encoding name and implementation name.")
+ "Mapping between normalized external format name and implementation name.")
-(defvar *external-character-encodings*
- (mapcar 'car *external-encoding-mapping*)
- "List of normalized names of external encodings support by underlying implementation.")
+(defvar *foreign-encodings*
+ (mapcar 'car *foreign-encoding-mapping*)
+ "List of normalized names of external formats support by underlying implementation.")
-(defun map-normalized-external-encoding (normalized)
- (cdr (assoc normalized *external-encoding-mapping* :test 'eql)))
+(defun implementation-foreign-encoding (normalized)
+ (cdr (assoc normalized *foreign-encoding-mapping* :test 'eql)))
+
+(defun foreign-encoded-string-octets (str &optional foreign-encoding)
+ "Returns the octets required to represent the string when passed to a ~
+foreign function."
+ ;; AllegroCL, CCL, and Lispworks give correct value without converting
+ ;; to external-format. CLISP, like SBCL, requires conversion with external-
+ ;; format
+ (length #+(and sbcl sb-unicode)
+ (sb-ext:string-to-octets
+ str
+ :external-format (or foreign-encoding
+ *default-foreign-encoding*
+ :utf-8))
+ #-(and sbcl sb-unicode) str))