Encoding e的重音为0xCCA9的字符编码是什么?
我试图读取一个文件,但我搞不懂字符编码。我知道文件中有两个字符的值,我在十六进制编辑器中看到的十六进制值如下:Encoding e的重音为0xCCA9的字符编码是什么?,encoding,character-encoding,Encoding,Character Encoding,我试图读取一个文件,但我搞不懂字符编码。我知道文件中有两个字符的值,我在十六进制编辑器中看到的十六进制值如下: 0xCCA9 é 0xCCBB ê 0xCCC1 á 知道这是什么吗 文件中所有英文字符均采用ASCII编码。我有类似的文件是在mac central europe中编码的,如果有任何用处的话,也许它们被意外地编码了不止一次 编辑: 在Python2.7中查找映射的代码:(参见上面的Esailija的回答) 查找映射(…)是一个生成器,它提供了一个字符映射字典。它遍历所有可用的
0xCCA9 é
0xCCBB ê
0xCCC1 á
知道这是什么吗
文件中所有英文字符均采用ASCII编码。我有类似的文件是在mac central europe中编码的,如果有任何用处的话,也许它们被意外地编码了不止一次
编辑:
在Python2.7中查找映射的代码:(参见上面的Esailija的回答)
查找映射(…)
是一个生成器,它提供了一个字符映射字典。它遍历所有可用的字符集,并生成符合条件的字符集
import pkgutil
import encodings
def get_encodings():
false_positives = set(["aliases"])
found = set(name for imp, name, ispkg in pkgutil.iter_modules(encodings.__path__) if not ispkg)
found.difference_update(false_positives)
return found
def find_mappings(maps):
encodings = sorted(get_encodings())
for f in encodings:
for g in encodings:
try:
if all([k.decode(f).encode(g) == v for k,v in maps.items()]):
yield (f,g)
except:
# Couldn't encode/decode
pass
for mapping in find_mappings({'\xCC': '\xC3', '\xBB': '\xAA', '\xA9': '\xA9', '\xC1': '\xA1'}):
print(mapping)
在我的计算机中,没有映射到这些字符的编码,但您可以在您的计算机中尝试以下程序,该程序将告诉您是否有匹配的编码:
public class StackOverflow_14128729
{
public static void Test()
{
string expectedString = "éêá";
byte[] dataBigEndian = new byte[] { 0xCC, 0xA9, 0xCC, 0xBB, 0xCC, 0xC1 };
byte[] dataLittleEndian = new byte[] { 0xA9, 0xCC, 0xBB, 0xCC, 0xC1, 0xCC };
byte[] shortData = new byte[] { 0xA9, 0xBB, 0xC1 };
bool found = false;
foreach (var encodingInfo in Encoding.GetEncodings())
{
Encoding encoding = encodingInfo.GetEncoding();
foreach (var data in new byte[][] { dataLittleEndian, dataBigEndian, shortData })
{
try
{
string str = encoding.GetString(data);
if (str == expectedString)
{
Console.WriteLine("Encoding is {0} - {1} - {2}", encodingInfo.CodePage, encodingInfo.Name, encodingInfo.DisplayName);
found = true;
break;
}
}
catch (Exception)
{
// not this one, try next
}
}
if (found)
{
break;
}
else
{
byte[] bytes = encoding.GetBytes(expectedString);
string byteString = string.Join(" ", bytes.Select(b => string.Format("0x{0:X2}", (int)b)));
//Console.WriteLine("{0} - {1}", encodingInfo.CodePage, byteString);
}
}
if (!found)
{
Console.WriteLine("Encoding not found");
}
}
}
它不是任何编码,而是混乱的编码转换的结果。UTF-8中的情况:
0xC3A9 é
0xC3AA ê
0xC3A1 á
所以我认为最初发生的是UTF-8数据在ASCII兼容的代码页X中处理,然后结果被编码到Mac Central Europe的文件中
要获得原始数据,您需要在Mac Central Europe中解释文件,在代码页X中重新编码结果,并在UTF-8中解释重新编码的结果
我不知道代码页X是什么,但它必须具有以下属性,因为上面是正确的:
- 将
编码为)
;与Mac、Windows和ISO编码相同0xA9
- 将
编码为Ő
;排除任何DOS代码页0xC3
- 将
编码为Ľ
0xAA
- 将
编码为Ń
0xA1
- 是ASCII兼容码;排除任何EBCDIC代码页