mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	bpo-46659: Fix the MBCS codec alias on Windows (GH-31218)
This commit is contained in:
		
							parent
							
								
									8fb94893e4
								
							
						
					
					
						commit
						ccbe8045fa
					
				
					 2 changed files with 17 additions and 11 deletions
				
			
		|  | @ -152,7 +152,14 @@ def search_function(encoding): | ||||||
|     # Return the registry entry |     # Return the registry entry | ||||||
|     return entry |     return entry | ||||||
| 
 | 
 | ||||||
|  | # Register the search_function in the Python codec registry | ||||||
|  | codecs.register(search_function) | ||||||
|  | 
 | ||||||
| if sys.platform == 'win32': | if sys.platform == 'win32': | ||||||
|  |     # bpo-671666, bpo-46668: If Python does not implement a codec for current | ||||||
|  |     # Windows ANSI code page, use the "mbcs" codec instead: | ||||||
|  |     # WideCharToMultiByte() and MultiByteToWideChar() functions with CP_ACP. | ||||||
|  |     # Python does not support custom code pages. | ||||||
|     def _alias_mbcs(encoding): |     def _alias_mbcs(encoding): | ||||||
|         try: |         try: | ||||||
|             import _winapi |             import _winapi | ||||||
|  | @ -164,8 +171,4 @@ def _alias_mbcs(encoding): | ||||||
|             # Imports may fail while we are shutting down |             # Imports may fail while we are shutting down | ||||||
|             pass |             pass | ||||||
| 
 | 
 | ||||||
|     # It must be registered before search_function() |  | ||||||
|     codecs.register(_alias_mbcs) |     codecs.register(_alias_mbcs) | ||||||
| 
 |  | ||||||
| # Register the search_function in the Python codec registry |  | ||||||
| codecs.register(search_function) |  | ||||||
|  |  | ||||||
|  | @ -3191,13 +3191,16 @@ def test_incremental(self): | ||||||
|         self.assertEqual(decoded, ('abc', 3)) |         self.assertEqual(decoded, ('abc', 3)) | ||||||
| 
 | 
 | ||||||
|     def test_mbcs_alias(self): |     def test_mbcs_alias(self): | ||||||
|         # On Windows, the encoding name must be the ANSI code page |         # Check that looking up our 'default' codepage will return | ||||||
|         encoding = locale.getpreferredencoding(False) |         # mbcs when we don't have a more specific one available | ||||||
|         self.assertTrue(encoding.startswith('cp'), encoding) |         code_page = 99_999 | ||||||
| 
 |         name = f'cp{code_page}' | ||||||
|         # The encodings module create a "mbcs" alias to the ANSI code page |         with mock.patch('_winapi.GetACP', return_value=code_page): | ||||||
|         codec = codecs.lookup(encoding) |             try: | ||||||
|         self.assertEqual(codec.name, "mbcs") |                 codec = codecs.lookup(name) | ||||||
|  |                 self.assertEqual(codec.name, 'mbcs') | ||||||
|  |             finally: | ||||||
|  |                 codecs.unregister(name) | ||||||
| 
 | 
 | ||||||
|     @support.bigmemtest(size=2**31, memuse=7, dry_run=False) |     @support.bigmemtest(size=2**31, memuse=7, dry_run=False) | ||||||
|     def test_large_input(self, size): |     def test_large_input(self, size): | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner