Regex 解析字符集而不转换为UTF-8

Regex 解析字符集而不转换为UTF-8,regex,parsing,utf-8,character-encoding,ascii,Regex,Parsing,Utf 8,Character Encoding,Ascii,我正在对编译成CSS的一组语言进行解析/标记化,我一直在思考如何处理非ASCII输入。显然,很多人以前都处理过这个问题 作为一般的经验法则,我一直在阅读“转换为UTF-8,处理,并转换回您作为输入的任何编码。”我倾向于同意这种方法 但我一直在想,我将直接使用的所有标点符号和数字都是ASCII码(代码点低于127),而其他字符串都将填充在哈希表中(即,程序不应该关心表示任何给定字符需要多少字节) 问题来了: 是否存在与我感兴趣的代码点(均低于127)的ASCII定义冲突的正式字符集 在设置大ol

我正在对编译成CSS的一组语言进行解析/标记化,我一直在思考如何处理非ASCII输入。显然,很多人以前都处理过这个问题

作为一般的经验法则,我一直在阅读“转换为UTF-8,处理,并转换回您作为输入的任何编码。”我倾向于同意这种方法

但我一直在想,我将直接使用的所有标点符号和数字都是ASCII码(代码点低于127),而其他字符串都将填充在哈希表中(即,程序不应该关心表示任何给定字符需要多少字节)

问题来了:

  • 是否存在与我感兴趣的代码点(均低于127)的ASCII定义冲突的正式字符集

  • 在设置大ole字符范围以匹配我不打算直接处理的所有字符以及跳过整个宽字符UTF-8编码-解码失败时,你能看到任何明显的错误吗

例如:

//A-Z, a-z and all the non-ASCII stuff
character = (0x41..0x5A) || (0x61..0x7A) || (0x80..0xFF)

//match 1 or more
identifier = character+
非常感谢

。但你不必担心这个


不过,一般来说,我认为最明智的方法是接受任何编码作为输入,然后直接输出UTF-8。

如果要使用无意识编码(如PHP),则不能支持UTF-16等输入编码,即编码必须是ASCII兼容的位编码。不要与字符集中的ASCII兼容性混淆

不经意编码对您来说很好,因为数据只是在传递。如果您需要以任何其他方式处理字符内容,则每次都需要解码,因此您也可以这样做 一开始就解码一次


不要对UTF-8中的内容进行编码(因此需要解码、声明、检测和其他复杂性),只需将其传递出去即可。如果输入为UTF-8,则输出为UTF-8。如果输入为Windows-1252,则输出为Windows-1252。最不奇怪的是…

你没有说你打算对这篇文章做什么,但我不会那么担心UTF-8。这应该很容易理解,当你去,只是复制你不想在特殊的方式处理。这就是我所想的。我相信,只要我以相同的顺序和编码方式把它吐出来,就可以了。有许多编码方案都不兼容ASCII码,从非ASCII单字节编码到UTF-16、Big5和co。问题是,你真的会遇到这些吗?是的,我想UTF-8是“事实上的标准”作为ASCII兼容,我可以通过关注与我的语法相关的ASCII符号,并让用户处理0xCF 0x80(pi)是一个字节还是两个字节,来获得一个不错的覆盖范围。