如何将 iso8859_6 中的文件名转换为 utf-8?

粘土

我收到了数千个要处理的 Excel 文件。当我打开它们时,数据似乎以一种我可以用 Python 读取和处理的方式进行编码。

但是,文件名被破坏了。我将文件名导入 sqlite,然后将它们的列表导出到 CSV 以尝试使用正确的编码导入 Excel。

这是它们在文件系统中的显示方式:

在此处输入图片说明

如果我告诉 Excel 导入为28596: Arabic (ISO)这就是名称的显示方式,我假设它映射到iso8859_6python 3.5 编码。

在此处输入图片说明

导入后,Excel 本身无法正确显示它们。这就是它们的外观,我认为这是字体问题。

在此处输入图片说明

Anyhow, if I import these file names into Python, I can't encode/decode them without errors. If I set errors to ignore then I don't see the file names.

Any idea how to encode these to a standard Unicode Arabic that will display properly alongside all of the other Arabic text I'm working with?

Here's one example of how it appears in the file explorer on Windows and Finder on MacOS.

½ñΘ Ω⌐αε δτßí ñáƒóƒ ƒΘª¼á ƒΘßá∩í Θ¼∞⌐ 4-2016.xlsx


Edit:

Here's what I've tried in code... I have the filenames in a sqlite database, so I fetch them from there. (By the way, I don't have a problem with 99.9% of the Arabic I'm dealing with -- just these file names.)

import dataset
db = dataset.connect("sqlite:///mydata.sqlite")

# Hit on one of the characters that appears in the garbled file names
res = db.query("SELECT * FROM files WHERE file_name LIKE '%Ω%'")
file_names = [r['file_name'] for r in res]
test = file_names[0]
print(test)

>> '½ñΘ Ω⌐αε δτßí ñáƒóƒ ƒΘª¼á ƒΘßá∩í Θ¼∞⌐ 4-2016.xlsx'

Trying a few things:

test.encode('iso8859_6')

That leads to an error.

UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-10-9c734319c359> in <module>()
----> 1 test.encode('iso8859_6')

C:\ProgramData\Anaconda3\lib\encodings\iso8859_6.py in encode(self, input, errors)
     10 
     11     def encode(self,input,errors='strict'):
---> 12         return codecs.charmap_encode(input,errors,encoding_table)
     13 
     14     def decode(self,input,errors='strict'):

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

Try with the codecs library

import codecs
codecs.encode(test,encoding='iso8859_6')

Same error as above.

codecs.encode(test,encoding='iso8859_6',errors='ignore')

>> b'       4-2016.xlsx'

Another try:

codecs.encode(test,encoding='iso8859_6',errors='ignore').decode('utf-8')

>> '       4-2016.xlsx'

Try the other way around to convert it to bytes and then to the iso format:

codecs.encode(test,encoding='utf-8',errors='ignore')

>> b'\xc2\xbd\xc3\xb1\xce\x98 \xce\xa9\xe2\x8c\x90\xce\xb1\xce\xb5 \xce\xb4\xcf\x84\xc3\x9f\xc3\xad \xc3\xb1\xc3\xa1\xc6\x92\xc3\xb3\xc6\x92 \xc6\x92\xce\x98\xc2\xaa\xc2\xbc\xc3\xa1 \xc6\x92\xce\x98\xc3\x9f\xc3\xa1\xe2\x88\xa9\xc3\xad \xce\x98\xc2\xbc\xe2\x88\x9e\xe2\x8c\x90 4-2016.xlsx'

Chaining with decode...

codecs.encode(test,encoding='utf-8',errors='ignore').decode('iso8859_6')

This error:

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-22-4a3c96284d09> in <module>()
----> 1 codecs.encode(test,encoding='utf-8',errors='ignore').decode('iso8859_6')

C:\ProgramData\Anaconda3\lib\encodings\iso8859_6.py in decode(self, input, errors)
     13 
     14     def decode(self,input,errors='strict'):
---> 15         return codecs.charmap_decode(input,errors,decoding_table)
     16 
     17 class IncrementalEncoder(codecs.IncrementalEncoder):

UnicodeDecodeError: 'charmap' codec can't decode byte 0xbd in position 1: character maps to <undefined>

所以......也许这是错误的编码?

老实说,我真的不知道从哪里开始,因为我不太熟悉阿拉伯语的各种编码。

黑灯

这个很棘手。您的sqlite数据库正在向您发送解码不当的数据。它使用代码页 437 而不是代码页 720。您可以通过反转错误的编码然后正确解码来解决此问题:

filename = '½ñΘ Ω⌐αε δτßí ñáƒóƒ ƒΘª¼á ƒΘßá∩í Θ¼∞⌐ 4-2016.xlsx'
filename_fixed = filename.encode('cp437').decode('cp720')
print(filename_fixed) # prints "سجل مرضى نقطة جباتا الخشب الطبية لشهر 4-2016.xlsx"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将ISO-8859-1字符正确替换为UTF-8?

来自分类Dev

Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

来自分类Dev

将SQL Server中的文本值从UTF8转换为ISO 8859-1

来自分类Dev

如何将无效UTF-8字符的文件名转换回字节?

来自分类Dev

如何将无效UTF-8字符的文件名转换回字节?

来自分类Dev

如何在Ruby 2.0中将UTF-8转换为ISO-8859-1?

来自分类Dev

Powershell:如何将“ ISO”字符转换为UTF8?

来自分类Dev

将iso-8859-1转换为utf-8 javascript

来自分类Dev

Javascript将字符串从utf-8转换为iso-8859-1

来自分类Dev

将UTF-8转换为ISO-8859-2(抛光)

来自分类Dev

将(txt | srt)文档从Western(ISO-8859-15)转换为UTF-8

来自分类Dev

将ISO-8859-1转换为utf-8(øæå)

来自分类Dev

从 Linux 终端将 ISO-8859-7 转换为 utf-8 而无需 bom

来自分类Dev

将字符从ISO-8859-1转换为Javascript中的UTF-8编码时,保持字符表示

来自分类Dev

根据.procmailrc文件中的文本将utf8解码为ISO-8859-1邮件

来自分类Dev

从UTF8转换为ISO 8859-5,改为获取ISO 8859-1

来自分类Dev

使用Dart语言将字符串从ISO-8859-2转换为UTF-8

来自分类Dev

使用Dart语言将字符串从ISO-8859-2转换为UTF-8

来自分类Dev

Ruby将字符串编码从ISO-8859-1转换为UTF-8无效

来自分类Dev

如何从C中的八进制ISO-8859-1转储utf8

来自分类Dev

如何将csv文件编码转换为utf-8

来自分类Dev

如何将UTF-8中的波斯数字转换为ASCII中的欧洲数字?

来自分类Dev

如何将xml字符串UTF8转换为UTF16?

来自分类Dev

如何将xml字符串UTF8转换为UTF16?

来自分类Dev

如何将多个文件中的 Unicode 代码数字替换为 UTF-8 字符?

来自分类Dev

如何将文本文件从Shift JIS转换为UTF-8并从终端转换回

来自分类Dev

如何在C ++中将ISO-8859-7字符串“转换”为UTF-8?

来自分类Dev

jQuery或Javascript:从ISO-8859-1转换为utf8

来自分类Dev

在Delphi中将UTF8转换为ANSI(ISO-8859-1)

Related 相关文章

  1. 1

    如何将ISO-8859-1字符正确替换为UTF-8?

  2. 2

    Symfony2 + Doctrine:如何将iso8859-1转换为utf-8,反之亦然?

  3. 3

    将SQL Server中的文本值从UTF8转换为ISO 8859-1

  4. 4

    如何将无效UTF-8字符的文件名转换回字节?

  5. 5

    如何将无效UTF-8字符的文件名转换回字节?

  6. 6

    如何在Ruby 2.0中将UTF-8转换为ISO-8859-1?

  7. 7

    Powershell:如何将“ ISO”字符转换为UTF8?

  8. 8

    将iso-8859-1转换为utf-8 javascript

  9. 9

    Javascript将字符串从utf-8转换为iso-8859-1

  10. 10

    将UTF-8转换为ISO-8859-2(抛光)

  11. 11

    将(txt | srt)文档从Western(ISO-8859-15)转换为UTF-8

  12. 12

    将ISO-8859-1转换为utf-8(øæå)

  13. 13

    从 Linux 终端将 ISO-8859-7 转换为 utf-8 而无需 bom

  14. 14

    将字符从ISO-8859-1转换为Javascript中的UTF-8编码时,保持字符表示

  15. 15

    根据.procmailrc文件中的文本将utf8解码为ISO-8859-1邮件

  16. 16

    从UTF8转换为ISO 8859-5,改为获取ISO 8859-1

  17. 17

    使用Dart语言将字符串从ISO-8859-2转换为UTF-8

  18. 18

    使用Dart语言将字符串从ISO-8859-2转换为UTF-8

  19. 19

    Ruby将字符串编码从ISO-8859-1转换为UTF-8无效

  20. 20

    如何从C中的八进制ISO-8859-1转储utf8

  21. 21

    如何将csv文件编码转换为utf-8

  22. 22

    如何将UTF-8中的波斯数字转换为ASCII中的欧洲数字?

  23. 23

    如何将xml字符串UTF8转换为UTF16?

  24. 24

    如何将xml字符串UTF8转换为UTF16?

  25. 25

    如何将多个文件中的 Unicode 代码数字替换为 UTF-8 字符?

  26. 26

    如何将文本文件从Shift JIS转换为UTF-8并从终端转换回

  27. 27

    如何在C ++中将ISO-8859-7字符串“转换”为UTF-8?

  28. 28

    jQuery或Javascript:从ISO-8859-1转换为utf8

  29. 29

    在Delphi中将UTF8转换为ANSI(ISO-8859-1)

热门标签

归档