Character encoding 是否有ASCII扩展编码列表?

Character encoding 是否有ASCII扩展编码列表?,character-encoding,ascii,Character Encoding,Ascii,我需要根据已知的文件编码和所需的输出编码来决定何时(不)转换文本文件 如果文本是US-ASCII,那么如果输出编码是ASCII、UTF-8、拉丁1,… 显然,我需要将US-ASCII文件转换为UTF-16或UTF-32 标准编码列表位于 如果出现以下情况,则需要进行转换: 最小字符大小大于1字节或更大 前127个代码点与US-ASCII不同 我想知道: 关于每种编码的实现,是否有类似的列表,其中有详细信息(bytelenght、ASCII兼容性)? 我很高兴能有一个只包含 编辑

我需要根据已知的文件编码和所需的输出编码来决定何时(不)转换文本文件

如果文本是US-ASCII,那么如果输出编码是ASCII、UTF-8、拉丁1,…
显然,我需要将US-ASCII文件转换为UTF-16或UTF-32

标准编码列表位于

如果出现以下情况,则需要进行转换:

  • 最小字符大小大于1字节或更大
  • 前127个代码点与US-ASCII不同
我想知道:

  • 关于每种编码的实现,是否有类似的列表,其中有详细信息(bytelenght、ASCII兼容性)?
    • 我很高兴能有一个只包含

编辑
我已经找到了这个问题的答案

  • 所有8位或8位可变编解码器都是ASCII的超集吗?
    • 换句话说:US-ASCII可以解释为任何基于8位或8位变量的编码吗
此处:
相反,了解以下信息会有所帮助:

  • 是否有作为ASCII超集的字符集列表
这看起来很有希望:


但是我找不到实际的mime.charsets文件。

另一种方法是对给定编码中的字节0x00-0x7F进行解码,并检查字符是否与ASCII匹配。例如,在Python 3.x中:

def是ascii超集(编码):
对于范围内的代码点(128):
如果字节([codepoint])。解码(编码,'ignore')!=chr(代码点):
返回错误
返回真值
这使得:

>>是ascii超集(“US-ascii”)
真的
>>>是ascii超集('windows-1252')
真的
>>>是ascii超集('ISO-8859-15')
真的
>>>是ascii超集('UTF-8')
真的
>>>是ascii超集('UTF-16')
假的
>>>_ascii_超集('IBM500')#是EBCDIC的变体吗
假的

编辑:获取Qt版本在C++中支持的每种编码的US-ASCII兼容性:

#包括
#包括
类型定义枚举
{
EqtCodec未定义,
设备不兼容,
EqtCodeCascioCompatible,
}tqtcodecype;
QMap QtCodecTypes()
{
QMap编码类型;
//如何测试Qt对ASCII数据的解释?
QList available=QTextCodec::availableCodecs();
QTextCodec*referenceCodec=QTextCodec::codeforname(“UTF-8”);//因为Qt没有US-ASCII,但我们只测试字节0-127,UTF-8是US-ASCII的超集
if(referenceCodec==0)
{
qDebug(“无法获取参考编解码器“UTF-8”);
返回编码类型;
}
对于(int i=0;itoUnicode(&c,1);//将字符转换为UTF-16(QString内部),假设它是ASCII(通过UTF-8)
sTest=currocodec->toUnicode(&c,1);//将字符转换为UTF-16,假设其类型为[currocodec]
if(sRef!=sTest)//比较两个UTF-16表示->如果它们相等,则这些编解码器对Qt是透明的
{
类型=eQtCodecAsciiIncompatible;
打破
}
}
CodecTypes.insert(名称、类型);
}
返回编码类型;
}

您想让这纯粹是为了决定某些东西是否需要转换?为什么不简单地进行转换;如果什么都不需要改变,什么也不会发生。不太了解这样的东西在什么情况下有用。@deceze我转换了一堆文件来替换旧文件。我不想碰那些不需要转换的文件。听起来合理吗?转换它们,测试它们是否与原始的相同,如果相同,则放弃转换?听起来简单多了。@deceze我想我们应该回到原来的问题“有一个字符集列表是ASCII的超集吗?”你是对的,想想看,成为ASCII超集的标准很简单,所以我可以自己创建这个列表——我会把我的C++实现添加到你的答案中,以便它一开始就有更多的参考。哦,非常有趣的解决方案。只需检查我得到的编码的前128个字节,就像对照列表检查一样简单。