草庐IT

Python UnicodeDecodeError - 我误解了编码吗?

coder 2023-05-21 原文

关于为什么这不起作用的任何想法?我真的认为“忽略”会做正确的事情。

>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)

最佳答案

……它们被称为“编码”是有原因的……

前言:将 unicode 视为规范或理想状态。 Unicode 只是一个字符表。 №65 是拉丁文大写 A。№937 是希腊大写 omega。就是这样。

为了让计算机存储和/或操作 Unicode,它必须将其 编码 为字节。 Unicode 最直接的编码是UCS-4;每个字符占用 4 个字节,所有 ~1000000 个字符都可用。这 4 个字节包含 Unicode 表中字符的编号,作为 4 字节整数。另一种非常有用的编码是 UTF-8,它可以将任何 Unicode 字符编码为一到四个字节。但也有一些有限的编码,如“latin1”,其中包含非常有限的字符范围,主要由西方国家使用。这样的编码每个字符只使用一个字节。

基本上,Unicode 可以encoded 有多种编码,编码后的字符串可以解码 为 Unicode。问题是,Unicode 来得太晚了,所以我们这些使用 8 位 字符集 长大的人都太晚了,因为我们一直在使用 编码 字符串。编码可以是 ISO8859-1,或 windows CP437,或 CP850,或,或,或,取决于我们的系统默认值。

因此,当您在源代码中输入字符串“add “Monitoring” to list”(我认为您想要字符串“add “Monitoring” to list”时,请注意第二个引号),您实际上是在使用一个已经根据您系统的默认代码页编码的字符串(我假设您使用的是 Windows 代码页 1252,“Western”)。如果您想从中获取 Unicode,您需要从“cp1252”编码中解码字符串。

所以,你的意思是:

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

不幸的是,Python 2.x 也包含一个字符串的 .encode 方法;这是“特殊”编码的便利功能,例如“zip”或“rot13”或“base64”编码,它们与 Unicode 无关。

无论如何,在来回 Unicode 转换中,您只需要记住:

  • Unicode 字符串被编码为 Python 2.x 字符串(实际上是字节序列)
  • Python 2.x 字符串被解码为 Unicode 字符串

在这两种情况下,您都需要指定将使用的编码

我不是很清楚,我困了,但我当然希望能帮上忙。

PS 一个幽默的旁注:玛雅人没有 Unicode;古罗马人、古希腊人、古埃及人也没有。他们都有自己的“编码”,几乎不尊重其他文化。所有这些文明都化为 Ember 。想想吧人!为了人类的利益,让您的应用程序支持 Unicode。 :)

PS2 请不要说“但是中国人……”来破坏前面的信息。但是,如果您倾向于或有义务这样做,请考虑到 Unicode BMP 主要由中文表意文字填充,因此延迟它,因此中文是 Unicode 的基础。只要人们开发支持 Unicode 的应用程序,我就可以继续编造令人发指的谎言。干杯!

关于Python UnicodeDecodeError - 我误解了编码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/368805/

有关Python UnicodeDecodeError - 我误解了编码吗?的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  3. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  4. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  5. c - Ruby - 源代码 - 编码风格 - 2

    查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity

  6. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

  7. ruby - 更改字符编码 - 2

    我在使用Ruby1.9.2p290更改文本文件的编码时遇到问题。我收到错误消息invalidbytesequenceinUTF-8(ArgumentError)。问题(我认为)在于字符集似乎是未知的。如果我执行以下操作,则从命令行:$filetest.txt我得到:Non-ISOextended-ASCIIEnglishtext,withCRLFlineterminators或者,或者,如果我这样做:$file-itest.txt我得到:test.txt:text/plain;charset=unknown但是,如果我这样做,在Ruby中:data=File.open("test.tx

  8. ruby-on-rails - 在 rails 中显示 base64 编码的图像 - 2

    我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve

  9. ruby - 如何设置 Mechanize 页面编码? - 2

    我试图通过点击一个链接获得一个带有ISO-8859-1编码的页面,所以代码类似于这样:page_result=page.link_with(:text=>'link_text').click到目前为止,我得到的结果编码错误,所以我看到的字符如下:'T�tulo:'insteadof'Título:'我尝试了几种方法,包括:使用代理在第一个请求中声明编码:@page_search=@agent.get(:url=>'http://www.server.com',:headers=>{'Accept-Charset'=>'ISO-8859-1'})说明页面本身的编码page_result.

  10. ruby - 如何将编码的查询值添加到 URL? - 2

    我正在寻找一种方便实用的方法来将编码值添加到Ruby中的URL查询字符串。目前,我有:require'open-uri'u=URI::HTTP.new("http",nil,"mydomain.example",nil,nil,"/tv",nil,"show="+URI::encode("Rosie&Jim"),nil)pu.to_s#=>"http://mydomain.example/tv?show=Rosie%20&%20Jim"这不是我要找的,因为我需要得到“http://mydomain.example/tv?show=Rosie%20%26%20Jim”,这样show=值就

随机推荐