该字符串是西班牙语字符串:Am rica
它应该是一个ê(代字号)但由于某种原因我得到了 。
我已经看过使用.decode和.encode也使用了Python中的unicode()方法,但没有任何东西可以提供我想要的输出。
使用代字号将此字符转换为正确的“e”的最佳方法是什么?
这甚至有意义吗?我可以从convert转换为ê??
我在包含Am rica的文件上运行了一个hexdump,这就是我找到的:
(env)bvh331-apvpsv01:active admin$ hexdump test.txt
0000000 41 6d ef bf bd 72 69 63 61 0a
000000a
我还运行了一个文件-I来获取char_set:
alexdaro@hplive-us163783-la-silo01 Desktop $ file -I tmp.es.srt
tmp.es.srt: text/plain; charset=utf-8
答案 0 :(得分:0)
每the wikipedia article on SubRip:
SubRip
assert
文件格式实际上仅支持Microsoft Windows文本编码默认值CP-1252(通常但不正确地称为ANSI)。可以添加Unicode字节顺序标记以支持任何Unicode编码,因为UTF-8与CP-1252的兼容性是首选。但是,由于与使用的商业字体相关的许可成本,许多嵌入式基于硬件的播放器仅支持非Unicode字体。
但是,此字符串无法在CP-1252中按需要呈现:
.srt
因此,大概是您从一个较大的文件中摘录了这个内容,该文件以BOM(字节顺序标记)开头,表示其编码,但丢弃了该BOM(以及编码信息)。作为替代理论,原始文件(以及生成和读取它的软件)可能只是不符合SubRip标准,或者已经生成用于非Unicode字体集的硬件。
答案 1 :(得分:0)
序列“ef bf bd”是U + FFFD(REPLACEMENT CHARACTER)的UTF-8,即一个特殊代码,显示为“ ”,如您的问题中所述。因此,某些东西(Python?)必须用这个代码替换原始的char。所以你的终端似乎没问题。
UTF-8中的'é'字符U + 00E9(LATIN SMALL LETTER E WITH ACUTE)将改为“c3 a9”。
可以想象您的原始字幕可能被编码为CP1252,其中“e”由代码0xe9表示。由于下一个字节是0x72('r'),您的解析器可能已将0xe9解释为不完整的UTF-8序列,因此将“e9”替换为“ef bf bd”(REPLACEMENT CHARACTER)。