Hi,

In a Python application, I want to convert a path (as native Unix bytes) to a file URL (and later probably also other paths between the "file system encoding" and UTF-8). There are functions for this in the Subversion binding. However, for the sake of being able to deal with the familiar Python exceptions, I’d like to do the decoding/encoding in Python. For that, I need to find out the encoding that Subversion uses for converting UTF-8 to the "file system encoding".

Subversion seems to use the encoding returned by apr_os_locale_encoding(), which is however not exposed by the Python bindings.

lib = ctypes.CDLL(libsvn._core.__file__)
lib.apr_os_locale_encoding.argtypes = [ctypes.c_void_p]
lib.apr_os_locale_encoding.restype = ctypes.c_char_p
with util.with_lc_ctype():
    es = lib.apr_os_locale_encoding(int(svn.core.application_pool.this))
fsencoding = codecs.lookup(es).name

Is there an easier way? I could emulate what apr_os_locale_encoding() is doing, which is calling nl_langinfo() and falling back to ISO-8859-1 on systems which are supported by Python. Is it reasonable to assume that this logic will stay? Or, asked differently, what has the least chance of stopping to give the "file system encoding"? The ctypes code or using nl_langinfo (falling back to ISO-8859-1)?

Thanks,
Manuel

Reply via email to