unicode - EM Dash #151 有什么区别?和#8212;?

标签 unicode utf-8 ascii

我有一个 ASCII 文件,其中包含一个 EM Dash(— 或 HTML 中的 —)。十六进制值为 0x97。当我们通过一个应用程序传递这个文件时,它以 UTF-8 格式到达,并将字符转换为 0xC297,即 —在 HTML 中。但是,当我们通过不同的应用程序传递这个文件时,它会将字符转换为 0xE28094 或 — .

什么会导致这些应用程序以不同的方式转换这些字符?它可能是代码页设置吗?

最佳答案

——错了。当您使用数字字符引用时,数字是指 Unicode 代码点。对于 256 以下的数字,与 ISO-8859-1 中的代码点相同。在 8859-1 中,字符 151 位于“C1 控制代码”中,而不是破折号或任何其他可见字符。

出现混淆是因为字符 151 是 Windows 代码页 1252(西欧)中的破折号。许多人认为 cp1252 与 ISO-8859-1 是一回事,但实际上并非如此:C1 范围(128 到 159)中的字符是不同的。

第一个应用程序将您的“ASCII”文件*读取为 ISO-8859-1,但实际上它可能是 cp1252,您需要一种方法来提示应用程序了解它所期望的编码。

(*: 如果文件中存在高位集字符,则“ASCII”是用词不当。您可能指的是“ANSI”,这实际上也是用词不当,但在 Windows 世界中,它的意思是“文本编码在当前系统默认代码页中”。)

关于unicode - EM Dash #151 有什么区别?和#8212;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/631406/

相关文章:

javascript - 如何匹配unicode字符正则表达式

python - 我怎样才能在 python 中解码这个字符串?

c++ - 在 unicode 和非 unicode 环境中转换 TCHAR * -> std::wstring

encoding - Flask 无法渲染变音符号

c++ - 如何将 std::istream 转换为 std::wistream

java - 如何将数字字符串转换为字符

ios - 我该如何解决表情符号被分解成字符的问题?

utf-8 - 如何使用 Unicode 将 DOS ANSI (CP 437) 文件转换为 Unix ANSI?

python - 当 DISPLAY 在 python 中未定义时,使用 matplotlib 生成带有 UTF-8 标签的 JPG

vb.net - 字符看起来像 ASCII 63 但不是所以我不能删除它