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是什么,但它必须具有以下属性,因为上面是正确的:

  • 编码为
    0xA9
    ;与Mac、Windows和ISO编码相同
  • Ő
    编码为
    0xC3
    ;排除任何DOS代码页
  • Ľ
    编码为
    0xAA
  • Ń
    编码为
    0xA1
  • 是ASCII兼容码;排除任何EBCDIC代码页

恐怕运气不好。我也试过enca,它发誓它是ISO-8859-2!好的。我编写了一个程序来映射每个可用的字符集,以测试它是否满足这些条件,请参阅我的编辑。原来是罗马和拉丁语