首先,我将Windows CMD编码更改为utf-8并运行Python解释器:
chcp 65001
python
Run Code Online (Sandbox Code Playgroud)
然后我尝试在其中打印一个unicode sting,当我这样做时,Python以一种特殊的方式崩溃(我只是在同一个窗口中得到一个cmd提示符).
>>> import sys
>>> print u'ëèæîð'.encode(sys.stdin.encoding)
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会发生以及如何使它工作?
UPD:sys.stdin.encoding退货'cp65001'
UPD2:我刚才发现这个问题可能与utf-8使用多字节字符集这一事实有关(kcwu就此提出了一个很好的观点).我尝试使用'windows-1250'运行整个示例并得到'ëea?'.Windows-1250使用单字符集,因此它适用于它理解的字符.但是我仍然不知道如何让'utf-8'在这里工作.
UPD3:哦,我发现它是一个已知的Python bug.我想会发生的事情是Python将cmd编码复制为'cp65001到sys.stdin.encoding并尝试将其应用于所有输入.由于它无法理解'cp65001',因此它会在包含非ascii字符的任何输入上崩溃.
我正在使用ruby 1.9.2
我正在尝试解析包含一些法语单词的CSV文件(例如spécifié)并将内容放在MySQL数据库中.
当我从CSV文件中读取行时,
file_contents = CSV.read("csvfile.csv", col_sep: "$")
Run Code Online (Sandbox Code Playgroud)
这些元素以ASCII-8BIT编码的字符串形式返回(spécifié变为sp\xE9cifi\xE9),然后像"spécifié"这样的字符串未正确保存到我的MySQL数据库中.
Yehuda Katz说ASCII-8BIT实际上是"二进制"数据,这意味着CSV不知道如何读取适当的编码.
所以,如果我尝试使CSV强制编码如下:
file_contents = CSV.read("csvfile.csv", col_sep: "$", encoding: "UTF-8")
我收到以下错误
ArgumentError: invalid byte sequence in UTF-8:
Run Code Online (Sandbox Code Playgroud)
如果我回到我原来的ASCII-8BIT编码字符串并检查我的CSV读取为ASCII-8BIT的字符串,它看起来像"非sp\xE9cifi\xE9"而不是"非spécifié".
这样做我无法将"Non sp\xE9cifi\xE9"转换为"非spécifié"
"Non sp\xE9cifi\xE9".encode("UTF-8")
因为我收到这个错误:
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8,
Katz指出会发生这种情况,因为ASCII-8BIT实际上并不是一个正确的字符串"编码".
问题:
我有一个在生产模式下运行的rails应用程序,但是当用户试图保存记录时,突然出现了这个错误.
Mysql2::Error: Incorrect string value
Run Code Online (Sandbox Code Playgroud)
更多细节(来自生产日志):
Parameters: {"utf8"=>"â<9c><93>" ...
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k
Mysql2::Error: Incorrect string value: '\xC5\x99\xC3\xA1k
Run Code Online (Sandbox Code Playgroud)
现在我看到了一些需要删除数据库并重新创建数据库的解决方案,但我不能这样做.
现在mysql显示了这个:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec) …Run Code Online (Sandbox Code Playgroud) 我需要在Python中将一堆文件转换为utf-8,而我在"转换文件"部分时遇到了麻烦.
我想做相当于:
iconv -t utf-8 $file > converted/$file # this is shell code
Run Code Online (Sandbox Code Playgroud)
谢谢!
对于已经指定的页面(通过HTTP标头或元标记),要使用带有UTF-8字符集的Content-Type ...是否有添加accept-charset="UTF-8"到HTML表单的好处?
(我理解的accept-charset属性在IE打破了ISO-8859-1,但我还没有听说过有IE和UTF-8的问题.我只是问,如果有一个好处与UTF-8将它添加到有助于防止输入无效的字节序列.)
为什么我应该使用人类可读的文件格式而不是二进制格式?有不是这种情况的情况吗?
编辑:我在最初发布问题时确实有这个作为解释,但现在不太相关:
在回答这个问题时,我想让提问者参考一个标准的答案,解答为什么使用人类可读的文件格式是一个好主意.然后我搜索了一个,找不到一个.所以这就是问题所在
有没有办法迫使VS总是使用Unicode,而不是奇怪的ISO-something?
我正在使用Vista上的Visual Studio 2008(波兰语语言环境)开发winapp csproject.当我在Win Server 2003(英语语言环境)上构建项目时出现问题 - 然后波兰语变音就消失了.
我调查过这个问题是由不正确的源文件编码引起的.看起来源文件没有使用UTF-8编码.
我想处理包含奇怪字符的文件名,比如法语é.
shell中的一切都运行良好:
C:\somedir\>ren -hélice hélice
Run Code Online (Sandbox Code Playgroud)
我知道如果我把这行放在.bat文件中,我得到以下结果:
C:\somedir\>ren -hÚlice hÚlice
Run Code Online (Sandbox Code Playgroud)
看?é已被Ú取代.
命令输出也是如此.如果我dir在shell中有一些目录,输出就可以了.如果我将此输出重定向到文件,则会转换某些字符.
那么我怎么能告诉cmd.exe如何解释我的批处理文件中出现的é,实际上是é而不是Ú或逗号?
因此,执行.bat文件时无法提供有关其编写代码页的提示?
我想写出一个文本文件.
而不是默认的UTF-8,我想把它编码为ISO-8859-1编码,这是代码页28591.我不知道如何做到这一点......
我用以下非常简单的代码写出我的文件:
using (StreamWriter sw = File.CreateText(myfilename))
{
sw.WriteLine("my text...");
sw.Close();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CURL这样的请求:
curl -X DELETE "https://myhost/context/path/users/OXYugGKg207g5uN/07V"
Run Code Online (Sandbox Code Playgroud)
哪里OXYugGKg207g5uN/07V是哈希,所以我想我需要在执行此请求之前进行编码.
我试过了 curl -X DELETE --data-urlenconded "https://myhost/context/path/users/OXYugGKg207g5uN/07V"
一些想法?
encoding ×10
utf-8 ×5
cmd ×2
file ×2
python ×2
ruby ×2
windows ×2
abstraction ×1
batch-file ×1
binary ×1
c# ×1
csv ×1
curl ×1
formatting ×1
forms ×1
html ×1
http-delete ×1
iso-8859-1 ×1
localization ×1
mysql ×1
request ×1
string ×1
unicode ×1
url ×1