如何处理将带有变音符号的外国电影片名导入数据库的编码?

问题描述

对此可能没有一个规则,但我试图找到一种方法来处理 PSQL 导入与在 bash 或其他程序中检索和显示记录之间的编码。我对编码的想法很陌生,所以请耐心等待!我遇到了字符“é”的问题。我在导入时遇到错误 ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x72 0x61(我相信它的默认值是 UTF-8)并且能够通过在导入时将编码更改为 Windows-1251 来临时修复它。但是,尝试在 bash 中检索数据给了我错误 ERROR: character with byte sequence 0xd0 0xb9 in encoding "UTF8" has no equivalent in encoding "WIN1252",所以我假设 bash 使用的是 1252 编码。

我将其全部删除并使用 WIN1252 编码重新导入,它适用于导入和检索。我担心的是我是否会在显示此字符或尝试在浏览器上检索它时遇到问题。目前,如果我在 bash 中通过 id 选择电影,我会得到 Les MisΘrables。老实说,并不理想,但如果没有错误,我也没关系。但是,当由于编码不匹配而无法完成查询时,它确实让我感到害怕。

根据我对 UTF-8 的一点了解,我觉得字符 'é' 应该首先被接受。我在网上搜索了一个字符集,就在上面。谁能告诉我更多关于这方面的信息?我倾向于使用 UTF-8,因为它似乎是最普遍的,但我不知道为什么它给我带来了麻烦。谢谢!

编辑:我完全缺乏有关编码的知识,这导致我从不保存专门编码为 UTF-8 的文件。那解决了它。感谢所有调查此事的人!

解决方法

在问题中描述了三个不同的个人问题。用 Python 给出的代码示例(我希望通常可以理解)。

1st ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x72 0x61 的意思正是所说的:它不是 UTF-8

>>> print(bytearray([0xe9,0x72,0x61]).decode('latin1'))
éra

第二ERROR: character with byte sequence 0xd0 0xb9 in encoding "UTF8" has no equivalent in encoding "WIN1252"。来源是 UTF-8,结果是西里尔字母 ('WIN1251'):

>>> print(bytearray([0xd0,0xb9]).decode('UTF-8'))
й

3rd 我得到 Les MisΘrables(可能不是 Les Misérables?)这是一个公然的 mojibake 案例:

>>> print('Les Misérables'.encode('latin1').decode('cp437'))
Les MisΘrables

好吧,这里是讨论过的字节值和相应字符的概括。请注意,“CodePoint”列包含 Unicode (U+hhhh) 和 UTF-8 字节:

Char CodePoint                  Category Description
---- ---------                  -------- -----------
   é {U+00E9,0xC3,0xA9} LowercaseLetter Latin Small Letter E With Acute
   r {U+0072,0x72}      LowercaseLetter Latin Small Letter R
   a {U+0061,0x61}      LowercaseLetter Latin Small Letter A
   Ð {U+00D0,0x90} UppercaseLetter Latin Capital Letter Eth
   ¹ {U+00B9,0xC2,0xB9}     OtherNumber Superscript One
   й {U+0439,0xD0,0xB9} LowercaseLetter Cyrillic Small Letter Short I
   Θ {U+0398,0xCE,0x98} UppercaseLetter Greek Capital Letter Theta

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...