我正在使用Python 3(最近从Python 2切换)。我的代码通常在Linux上运行,但有时(不常见)在Windows上运行。根据{3}的Python 3文档,如果未提供locale.getpreferredencoding()
arg,则文本文件的默认编码来自encoding
。我希望这个默认值对于我的项目来说是utf-8
,无论它运行的是什么操作系统(目前,它总是UTF-8用于Linux,但不用于Windows)。该项目有很多次调用open()
,我不想将encoding='utf-8'
添加到所有这些调用中。因此,我想在Windows中更改区域设置的首选编码,就像Python 3看到的那样。
我发现了上一个问题
“open()
”,已经接受了答案,所以我觉得我很高兴。但遗憾的是,该答案及其第一条评论中的任何建议命令都不适用于Windows。具体来说,接受的答案及其第一条评论建议运行chcp 65001
和set PYTHONIOENCODING=UTF-8
,我已尝试过两者。请从我的cmd窗口查看下面的成绩单:
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> chcp 65001
Active code page: 65001
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> set PYTHONIOENCODING=UTF-8
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
请注意,即使在两个建议的命令之后,我打开的文件的编码仍然是cp1252
而不是预期的utf-8
。
答案 0 :(得分:12)
从python3.5.1开始,这个hack看起来像这样:
appstore
此后打开的所有文件将默认编码为Uber
。
答案 1 :(得分:5)
我知道这是一个真正的hacky解决方法,但您可以像这样重新定义<InsertItemTemplate>
<tr style="background-color:#D3D3D3">
<td valign="top">
<asp:Label runat="server" ID="FirstNameLabel"
AssociatedControlID="FirstNameTextBox" Text="First Name"/>
<asp:TextBox ID="FirstNameTextBox" runat="server"
Text='<%#Bind("FirstName") %>' /><br />
<asp:Label runat="server" ID="LastNameLabel"
AssociatedControlID="LastNameTextBox" Text="Last Name" />
<asp:TextBox ID="LastNameTextBox" runat="server"
Text='<%#Bind("LastName") %>' /><br />
<asp:Label runat="server" ID="EmailLabel"
AssociatedControlID="EmailTextBox" Text="E-mail" />
<asp:TextBox ID="EmailTextBox" runat="server"
Text='<%#Bind("EmailAddress") %>' />
</td>
<td>
<asp:LinkButton ID="InsertButton" runat="server"
CommandName="Insert" Text="Insert" />
</td>
</tr>
</InsertItemTemplate>
函数:
locale.getpreferredencoding()
如果你早点运行,那么在utf-8中打开之后打开的所有文件(至少在我的win xp机器上测试)都会打开,因为这会覆盖模块方法,这将适用于所有平台。
答案 2 :(得分:1)
该帖子很旧,但是问题仍然存在(在Python 3.7和Windows 10下)。
我对解决方案进行了如下改进,确保不覆盖语言/国家/地区部分,而仅覆盖编码,并确保仅在Windows下完成:
if os.name == "nt":
import _locale
_locale._gdl_bak = _locale._getdefaultlocale
_locale._getdefaultlocale = (lambda *args: (_locale._gdl_bak()[0], 'utf8'))
希望这对您有帮助...
答案 3 :(得分:0)
区域设置可以在 windows 中全局设置为 UTF-8,如果您愿意,如下所示:
Control panel
-> Clock and Region
-> Region
-> Administrative
-> Change system locale
-> 检查 Beta: Use Unicode UTF-8 ...
在此之后,并重新启动,我确认 locale.getpreferredencoding()
返回 'cp65001'
(=UTF-8) 并且 open
等函数默认为 UTF-8。