2010-04-03 8 views
14

Próbuję zadzwonić time.strftime() funkcji Pythona z wykorzystaniem formatu ciąg Unicode:Używanie formatu Unicode dla Pythona `time.strftime()`

u'%d\u200f/%m\u200f/%Y %H:%M:%S' 

(\u200f jest „Prawo do lewej Mark” (. RLM))

jednak jestem coraz wyjątek, że postać RLM nie mogą być kodowane do ASCII:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u200f' in position 2: ordinal not in range(128)

próbowałem poszukiwania alternatywnego b ut nie mógł znaleźć rozsądnego. Czy istnieje alternatywa dla tej funkcji, czy sposób, aby działała ona ze znakami Unicode?

Odpowiedz

24

Wiele funkcji standardowej biblioteki nadal nie obsługują Unicode tak, jak powinny. Możesz użyć tego obejścia:

fmt = u'%d\u200f/%m\u200f/%Y %H:%M:%S' 
time.strftime(fmt.encode('utf-8'), <your time here>).decode('utf-8') 
+0

Dziękuję. To działa ładnie. –

+1

Pamiętaj, że Python 3 będzie się zachowywał inaczej, zobacz mój raport o błędzie (http://bugs.python.org/issue8304). – AndiDog

+1

argh! ta informacja jest potrzebna więcej niż połowie planety (tylko użytkownicy pythonów) i została znaleziona ... tylko tutaj ... miło! –

4

można sformatować ciąg poprzez kodowanie UTF-8:

time.strftime(u'%d\u200f/%m\u200f/%Y %H:%M:%S'.encode('utf-8'), t).decode('utf-8') 
+0

Dziękuję. Jest to to samo co odpowiedź @ AndiDoga, ale ponieważ odpowiedział jako pierwszy, wybiorę jego odpowiedź jako zaakceptowaną. –

+0

@Alex, dzięki. Naprawiłem to. – Yaroslav

0

Powinieneś odczytać plik jako kod Unicode, a następnie przekonwertować go do formatu Date-time.

from datetime import datetime 

f = open(LogFilePath, 'r', encoding='utf-8') 
# Read first line of log file and remove '\n' from end of it 
Log_DateTime = f.readline()[:-1] 

Można zdefiniować format daty czasie tak:

fmt = "%Y-%m-%d %H:%M:%S.%f" 

Ale jakiś język programowania, takich jak C# nie obsługuje go łatwo, dzięki czemu można go zmienić na:

fmt = "%Y-%m-%d %H:%M:%S" 

Lub możesz użyć następująco (aby spełnić.% F):

Log_DateTime = Log_DateTime + '.000000' 

Jeśli masz nierozpoznany symbol (symbol Unicode), powinieneś go również usunąć.

# Removing an unrecognized symbol at the first of line (first character) 
Log_DateTime = Log_DateTime[1:] + '.000000' 

Na koniec, należy przekonwertować ciąg daty i godziny do prawdziwego formatu daty i czasu:

Log_DateTime = datetime.datetime.strptime(Log_DateTime, fmt) 
Current_Datetime = datetime.datetime.now() # Default format is '%Y-%m-%d %H:%M:%S.%f' 
# Calculate different between that two datetime and do suitable actions 
Current_Log_Diff = (Current_Datetime - Log_DateTime).total_seconds() 
Powiązane problemy