Кодировка Unicode для файловой системы в Mac OS X неверна в Python?

Имею небольшую проблему с именами файлов Unicode в OS X и Python. Я пытаюсь использовать имена файлов в качестве входных данных для регулярного выражения позже в коде, но кодировка, используемая в именах файлов, кажется, отличается от того, что говорит мне sys.getfilesystemencoding(). Возьмем следующий код:

#!/usr/bin/env python
# coding=utf-8

import sys,os
print sys.getfilesystemencoding()

p = u'/temp/s/'
s = u'åäö'
print 's', [ord(c) for c in s], s
s2 = s.encode(sys.getfilesystemencoding())
print 's2', [ord(c) for c in s2], s2
os.mkdir(p+s)
for d in os.listdir(p):
  print 'dir', [ord(c) for c in d], d

Он выводит следующее:

utf-8
s [229, 228, 246] åäö
s2 [195, 165, 195, 164, 195, 182] åäö
dir [97, 778, 97, 776, 111, 776] åäö

Итак, файловая система имеет кодировку utf-8, но когда я использую ее для кодирования имени файла åäö, это будет не то же самое, как если бы я создал имя каталога с та же строка. Я ожидаю, что когда я использую свою строку åäö для создания каталога и считываю его имя, он должен использовать те же коды, как если бы я применил кодировку напрямую.

Если мы посмотрим на кодовые точки 97, 778, 97, 776, 111, 776, это в основном символы ASCII с добавленным диакритическим знаком, например. o + ¨ = ö, что делает его двумя символами, а не одним. Как я могу избежать этого несоответствия, есть ли схема кодирования в Python, которая соответствует этому поведению OS X, и почему getfilesystemencoding() не дает мне правильный результат?

Или я что-то напутал?

16
задан RipperDoc 18 March 2012 в 11:22
поделиться