Thanks to visit codestin.com
Credit goes to github.com

Skip to content

bpo-29571: Fix test_re.test_locale_flag() #12099

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 28, 2019
Merged

bpo-29571: Fix test_re.test_locale_flag() #12099

merged 1 commit into from
Feb 28, 2019

Conversation

vstinner
Copy link
Member

@vstinner vstinner commented Feb 28, 2019

Use locale.getpreferredencoding() rather than locale.getlocale() to
get the locale encoding. With some locales, locale.getlocale()
returns the wrong encoding.

For example, on Fedora 29, locale.getlocale() returns ISO-8859-1
encoding for the "en_IN" locale, whereas
locale.getpreferredencoding() reports the correct encoding: UTF-8.

https://bugs.python.org/issue29571

Use locale.getpreferredencoding() rather than locale.getlocale() to
get the locale encoding. With some locales, locale.getlocale()
returns the wrong encoding.

For example, on Fedora 29, locale.getlocale() returns ISO-8859-1
encoding for the "en_IN" locale, whereas
locale.getpreferredencoding() reports the correct encoding: UTF-8.
@vstinner
Copy link
Member Author

I tested manually the PR on Fedora 29.

Without the fix:

$ LANG=en_IN ./python -m test test_re
...
test test_re failed -- Traceback (most recent call last):
  File "/home/vstinner/prog/python/master/Lib/test/test_re.py", line 1576, in test_locale_flag
    self.assertTrue(pat.match(bletter))
AssertionError: None is not true
...
Tests result: FAILURE

With the fix:

$ LANG=en_IN ./python -m test test_re
...
Tests result: SUCCESS

@tirkarthi
Copy link
Member

I can confirm the issue and the PR fixes the issue. But would like to know the difference between this PR and #149 since they both seem to return the same result but #149 ended up breaking Windows and had to be reverted with #554 meanwhile current PR works with windows CI.

karthi@ubuntu-s-1vcpu-1gb-blr1-01:~/cpython$ LANG=en_IN LC_ALL=en_IN ./python -c 'import locale; print(locale.getpreferredencoding(False))'
UTF-8
karthi@ubuntu-s-1vcpu-1gb-blr1-01:~/cpython$ LANG=en_IN LC_ALL=en_IN ./python -c 'import locale; print(locale.getpreferredencoding())'
UTF-8

@vstinner
Copy link
Member Author

But would like to know the difference between this PR and #149 since they both seem to return the same result but #149 ended up breaking Windows and had to be reverted with #554 meanwhile current PR works with windows CI.

Honestly, I don't know:
https://bugs.python.org/issue29571#msg336877

The two Windows CIs passed on this PR. I also tested manually the PR on my Windows VM and it passed.

@miss-islington
Copy link
Contributor

Thanks @vstinner for the PR ๐ŸŒฎ๐ŸŽ‰.. I'm working now to backport this PR to: 3.7.
๐Ÿ๐Ÿ’โ›๐Ÿค– I'm not a witch! I'm not a witch!

@vstinner vstinner deleted the test_locale_flag branch February 28, 2019 23:08
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Feb 28, 2019
Use locale.getpreferredencoding() rather than locale.getlocale() to
get the locale encoding. With some locales, locale.getlocale()
returns the wrong encoding.

For example, on Fedora 29, locale.getlocale() returns ISO-8859-1
encoding for the "en_IN" locale, whereas
locale.getpreferredencoding() reports the correct encoding: UTF-8.
(cherry picked from commit ab71f8b)

Co-authored-by: Victor Stinner <[email protected]>
@bedevere-bot
Copy link

GH-12108 is a backport of this pull request to the 3.7 branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
tests Tests in the Lib/test dir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants