diff --git a/uffi-compat/uffi-compat.lisp b/uffi-compat/uffi-compat.lisp
index 67a419d..37b3f15 100644
--- a/uffi-compat/uffi-compat.lisp
+++ b/uffi-compat/uffi-compat.lisp
@@ -84,6 +84,7 @@
    #:string-to-octets
    #:octets-to-string
    #:foreign-encoded-octet-count
+   #:lookup-foreign-encoding
 
    ;; function call
    #:def-function
@@ -658,3 +659,43 @@ output to *trace-output*.  Returns the shell's exit code."
   (babel:string-size-in-octets str
                                :encoding (or encoding
                                              cffi:*default-foreign-encoding*)))
+
+(defvar *default-foreign-encoding*
+  nil
+  "Normalized name of default external character format to use
+for foreign string conversions. nil means use implementation default
+encoding.")
+
+(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))
+    #+(and sbcl sb-unicode)
+    '((:ascii . :ascii) (:latin-1 . :latin-1) (:utf-8 . :utf-8)
+      (:ucs-2 . :ucs-2) (:sjis . :sjis) (:gbk . :gbk))
+    #+(and allegro ics)
+    '((:ascii . :ascii) (:latin-1 . :latin1) (:utf-8 . :utf-8)
+      (:sjis . :shift-jis) (:euc-jp . :euc) (:gbk . :gb2313)
+      (:ucs-2 . :unicode))
+    #+(and clisp unicode)
+    '((:ascii . charset:ascii) (:ucs-2 . charset:ucs-2)
+      (:utf-8 . charset:utf-8) (:latin-1 . charset:iso-8859-1)
+      (:jis . charset:jis_x0201) (:jis . charset:shift-jis)
+      (: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)
+      #+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 format name and implementation name.")
+
+(defvar *foreign-encodings*
+  (mapcar 'car *foreign-encoding-mapping*)
+  "List of normalized names of external formats support by underlying implementation.")
+
+(defun lookup-foreign-encoding (normalized)
+  (cdr (assoc normalized *foreign-encoding-mapping* :test 'eql)))
