Repository navigation
time.strftime() and Unicode characters on Windows #52551
Copy link
Copy link
Closed
Labels
3.12only security fixesonly security fixes3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixesOS-windowsextension-modulesC modules in the Modules dirC modules in the Modules dirstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-unicodetype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
| BPO | 8304 |
|---|---|
| Nosy | @terryjreedy, @pfmoore, @abalkin, @vstinner, @ericvsmith, @tjguk, @ezio-melotti, @shimizukawa, @zware, @eryksun, @zooba |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = None
closed_at = None
created_at = <Date 2010-04-03.15:08:42.673>
labels = ['3.8', '3.9', 'extension-modules', 'expert-unicode', 'type-bug', '3.10', 'library', 'OS-windows']
title = 'time.strftime() and Unicode characters on Windows'
updated_at = <Date 2021-03-08.19:17:29.084>
user = 'https://bugs.python.org/AndiDogold'bugs.python.org fields:
activity = <Date 2021-03-08.19:17:29.084>
actor = 'eryksun'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Extension Modules', 'Library (Lib)', 'Unicode', 'Windows']
creation = <Date 2010-04-03.15:08:42.673>
creator = 'AndiDog_old'
dependencies = []
files = []
hgrepos = []
issue_num = 8304
keywords = []
message_count = 16.0
messages = ['102269', '102298', '102310', '102332', '102335', '159341', '222667', '226114', '251554', '251558', '251560', '255043', '255133', '388241', '388277', '388286']
nosy_count = 12.0
nosy_names = ['terry.reedy', 'paul.moore', 'belopolsky', 'vstinner', 'eric.smith', 'tim.golden', 'ezio.melotti', 'AndiDog_old', 'shimizukawa', 'zach.ware', 'eryksun', 'steve.dower']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue8304'
versions = ['Python 3.8', 'Python 3.9', 'Python 3.10']Linked PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
3.12only security fixesonly security fixes3.13only security fixesonly security fixes3.14bugs and security fixesbugs and security fixesOS-windowsextension-modulesC modules in the Modules dirC modules in the Modules dirstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-unicodetype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
- StatusShow more project fieldsDone
Activity
AndiDogold commentedon Apr 3, 2010
There is inconsistent behavior in time.strftime, comparing Python 2.6 and 3.1. In 3.1, non-ASCII Unicode characters seem to get dropped whereas in 2.6 you can keep them using the necessary Unicode-to-UTF8 workaround.
This should be fixed if it isn't intended behavior.
Python 2.6
Python 3.1
ezio-melotti commentedon Apr 3, 2010
This seems to be fixed now, on both 3.1 and 3.2.
Can you try with 3.1.2 and see if it works?
What operating system are you using?
ezio-melotti commentedon Apr 4, 2010
Actually the bug seems related to Windows.
AndiDogold commentedon Apr 4, 2010
Just installed Python 3.1.2, same problem. I'm using Windows XP SP2 with two Python installations (2.6.4 and now 3.1.2).
AndiDogold commentedon Apr 4, 2010
Definitely a Windows problem. I did this on Visual Studio 2008:
and the output was
Python really shouldn't use any so-called standard functions on Windows. They never work as expected ^^...
vstinner commentedon Apr 25, 2012
See also the issue bpo-10653: wcsftime() doesn't format correctly time zones, so Python 3 uses strftime() instead.
BreamoreBoy commentedon Jul 10, 2014
Using 3.4.1 and 3.5.0 I get:-
terryjreedy commentedon Aug 30, 2014
I verified Marks 3.4.1 result with Idle.
It strikes me as a bug that a function that maps a unicode format string to a unicode string with interpolations added should ever encode the format to bytes, lets alone using using an encoding that fails or loses information. It is especially weird given that % formatting does not even work (at present) for bytes.
It seems to me that strftime should never encode the non-special parts of the format text. Instead, it could split the format (re.split) into a list of alternatine '%x' pairs and running text segments, replace the '%x' entries with the proper entries, and return the list joined back into a string. Some replacements would be locale dependent, other not.
(Just wondering, are the locate names of days and months bytes restricted to ascii or unrestricted unicode using native characters?)
[-]strftime and Unicode characters[/-][+]time.strftime() and Unicode characters on Windows[/+]BreamoreBoy commentedon Sep 24, 2015
@alexander what is you take on this please? I can confirm that it is still a problem on Windows in 3.5.0.
abalkin commentedon Sep 25, 2015
Mark, I am no expert on Windows. I believe Victor is most knowledgable in this area.
22 remaining items
gh-52551: Fix encoding issues in strftime() (GH-125193)
[3.13] pythongh-52551: Fix encoding issues in strftime() (pythonGH-12…
pythongh-52551: Fix encoding issues in strftime() (pythonGH-125193)
serhiy-storchaka commentedon Oct 17, 2024
Python's
time.strftime()now passes only ASCII strings to C'sstrftime(), so there are no encoding errors. But the result ofstrftime()still can contain non-ASCII data and it need to be decoded. I think that switching towcsftime()would make decoding less prone to locale misconfiguration errors.pythongh-52551: Use wcsftime() to implement time.strftime() on Windows
[3.13] gh-52551: Fix encoding issues in strftime() (GH-125193) (GH-12…
[3.13] pythongh-52551: Fix encoding issues in strftime() (pythonGH-12…
[3.12] gh-52551: Fix encoding issues in strftime() (GH-125193) (GH-12…
gh-52551: Use wcsftime() to implement time.strftime() on Windows (GH-…
pythongh-52551: Fix encoding issues in strftime() (pythonGH-125193)
pythongh-52551: Use wcsftime() to implement time.strftime() on Windows (