【问题标题】:In which encoding is 0xDB a currency symbol?0xDB 在哪种编码中是货币符号?
【发布时间】:2011-06-18 04:02:06
【问题描述】:

我收到了文件,遗憾的是,我无法获得有关它们是如何生成的信息。我需要解析这些文件。

除了一个字符之外,该文件完全是 ASCII:0xDB(十进制为 219)。

显然(通过查看文件)这个字符是货币符号。我知道是因为:

  • 这些文件必须在金额出现的任何位置包含货币符号
  • 文件中没有其他货币符号(既不是 $ 也不是欧元,也没有任何东西)
  • 每次出现 0xDB 时,它都会在金额旁边

认为在这些文件中 0xDB 应该代表欧元符号(实际上这个 0xDB 很有可能出现在应该出现欧元符号的任何地方)。

file 命令说明了这些文件:

ISO-8859 English text, with CRLF, LF line terminators

hexdump 给出了这个:

00000030  71 75 61 6e 74 20 db 32  2e 36 30 0a 20 41 49 4d  |quant .2.60. AIM|
                            ^^                                     ^

这些文件都是以其他方式正常格式化/可解析的。实际上,除了那个奇怪的 0xDB 字符之外,我得到的所有信息都很好。

有人知道发生了什么吗?货币符号(据说是欧元符号)是如何变成 0xDB 的?

它既不是 ISO-8859-1(又名 ISO Latin 1)也不是 ISO-8859-15,因为在这两种情况下,代码点 219 对应于“Û”(就像 Unicode 代码点 219 是 'LATIN CAPITAL LETTER U WITH循环')。

它不是扩展的 ASCII。

【问题讨论】:

  • 它不是任何 ISO-8859-* 变体,也不是任何标准 Microsoft 代码页。

标签: character-encoding ascii non-ascii-characters euro


【解决方案1】:

使用macroman script,学习:

$ macroman 0xDB
MacRoman DB  ⇒  U+20AC  ‹€›  \N{ EURO SIGN }

你也可以走另一条路:

$ macroman U+00E9
MacRoman 8E  ⇐  U+00E9  ‹é›  \N{ LATIN SMALL LETTER E WITH ACUTE }

我们知道 U+20AC EURO SIGN 确实是一个货币符号,因为 uniprops script 的输出:

$ uniprops -a U+20AC
U+20AC <€> \N{ EURO SIGN }:
    \pS \p{Sc}
    All Any Assigned InCurrencySymbols Common Zyyy Currency_Symbol Sc Currency_Symbols S Gr_Base Grapheme_Base Graph GrBase Print Symbol X_POSIX_Graph X_POSIX_Print
    Age=2.1 Bidi_Class=ET Bidi_Class=European_Terminator BC=ET Block=Currency_Symbols Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered CCC=NR Canonical_Combining_Class=NR Script=Common Decomposition_Type=None DT=None East_Asian_Width=A East_Asian_Width=Ambiguous EA=A Grapheme_Cluster_Break=Other GCB=XX Grapheme_Cluster_Break=XX Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA Joining_Group=No_Joining_Group JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U Line_Break=PR Line_Break=Prefix_Numeric LB=PR Numeric_Type=None NT=None Numeric_Value=NaN NV=NaN Present_In=2.1 IN=2.1 Present_In=3.0 IN=3.0 Present_In=3.1 IN=3.1 Present_In=3.2 IN=3.2 Present_In=4.0 IN=4.0 Present_In=4.1 IN=4.1 Present_In=5.0 IN=5.0 Present_In=5.1 IN=5.1 Present_In=5.2 IN=5.2 Present_In=6.0 IN=6.0 SC=Zyyy Script=Zyyy Sentence_Break=Other SB=XX Sentence_Break=XX Word_Break=Other WB=XX Word_Break=XX _X_Begin

【讨论】:

    【解决方案2】:

    它是 MacRoman。事实上它必须是 - 那是the only charset in which the Euro sign maps to 0xDB

    这是 MacRoman 的 full charset mapping

    【讨论】:

    • 这是一个非常有用的查找字符 -> 字符集映射的工具!
    【解决方案3】:

    0xDB 表示Mac OS Roman 字符编码中的欧元符号。

    【讨论】:

      【解决方案4】:

      可能是Mac OS Roman

      【讨论】:

      • +1... 完全有道理,这些文件在某一时刻被处理/重新传输到/从 Mac 计算机。你是怎么找到这个的?我试着用谷歌搜索了一下,但找不到任何东西......
      • 我认为它可能是en.wikipedia.org/wiki/… 上列出的字符集之一,只需检查每个字符集是否有 0xDB。
      • 因为他知道要映射到哪个字符,所以just look at the character 比搜索字符集更容易。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2014-08-28
      相关资源
      最近更新 更多