Windows“符号”或 WGL4 字体代码指向 UNICODE 映射?
Posted
技术标签:
【中文标题】Windows“符号”或 WGL4 字体代码指向 UNICODE 映射?【英文标题】:Windows "Symbol" or WGL4 font code point to UNICODE map? 【发布时间】:2021-07-10 01:16:54 【问题描述】:我们使用一些 OCR,如 PDF 到 Word 转换器,这是我们能找到的最好的,但它使用符号字体表,例如度数符号显示为代码点 U+F0B0,它不是有效的 UNICODE点,但它映射到正确的 UNICODE 度码点 U+00B0。事实上,除了一个 Symbol 字体字形之外,所有的符号字体字形都有一个正确的 UNICODE 字符,但我正在努力寻找任何可以显示简单映射的表格。
这个页面http://www.alanwood.net/demos/symbol.html 几乎有它,但它实际上并没有显示符号字体代码点,而是依赖于一些其他映射,坦率地说,我根本不明白。同一个网站有相关页面,但我在任何地方都找不到 F0B0 的学位参考。
我找到了这些特殊字体到旧 groff 缩写的 groff 映射,这是我能得到的最好的,我可以在 symbol.map 找到 F0B0 到缩写“de”的映射,然后我可以在text.map 从 00B0 到“de”的映射。因此,如果我要将这两个文件重塑为关系表,然后加入缩写,我想我可以创建一个映射。
但令我震惊的是,以前没有人必须这样做?有人吗?
【问题讨论】:
我不知道是否有人这样做。在其他方面,有“文本整形”库(一个非常复杂的主题,我们有一个由 Windows 使用,一个由 Mac 使用,还有两个)。简而言之:您无法以简单的方式将字体字形编号(在特定字体上)映射到一个或多个 Unicode 代码点。可能您不需要涵盖 100% 的情况,因此请查看字形并找到最佳 unicode 字符,然后构建您的“异常表”。 符号编码字体可以支持任意字符集,包括非 Unicode 字符。因此,没有任何定义的映射适用于所有符号字体。这就是为什么您会看到使用 U+F0B0 等 Unicode 私有代码点的原因。充其量,如果映射是可能的,它将是特定于字体的;并且字体中的字形总是有可能映射到具有复杂 m:n 映射的 Unicode 字符序列。 【参考方案1】:嗯,我想我并没有要求关于所有可能的符号字体的第一原则的论文,不,我要求的是 Windows“符号”字体、WGL4 代码页或我认为的任何“Monotype”符号”字体即。
这就是我从问题中指出的这些 groff 字体缩写映射生成映射的方法:
wget https://opensource.apple.com/source/groff/groff-39/groff/font/devlj4/generate/symbol.map
sed -e '/^#/d' -e '/^ *$/d' -e 's/[\t ][\t ]*/|/g' symbol.map |cut -d\| -f2,3 |sort -t\| -k2 >symbol.map.dat
wget https://opensource.apple.com/source/groff/groff-39/groff/font/devlj4/generate/text.map
sed -e '/^#/d' -e '/^ *$/d' -e 's/[\t ][\t ]*/|/g' text.map |cut -d\| -f2,3 |sort -t\| -k2 >text.map.dat
wget https://opensource.apple.com/source/groff/groff-39/groff/font/devlj4/generate/special.map
sed -e '/^#/d' -e '/^ *$/d' -e 's/[\t ][\t ]*/|/g' special.map |cut -d\| -f2,3 |sort -t\| -k2 >special.map.dat
cat text.map.dat special.map.dat |sort -t\| -k2 > unicode.map.dat
join -t\| -1 2 -2 2 symbol.map.dat unicode.map.dat
然后我从中创建一个 XML 映射表,并在我的 XSLT 中使用它:
join -t\| -1 2 -2 2 symbol.map.dat unicode.map.dat |sed -e 's~\([^|]*\)|\([^|]*\)|\([^|]*\)~<a abb="\1" sym="\&#x\2;" uni="\&#x\3;"/>~'
这会创建:
<a abb="" sym="" uni="≃"/>
<a abb="!" sym="" uni="!"/>
<a abb="!=" sym="" uni="≠"/>
<a abb="#" sym="" uni="#"/>
<a abb="%" sym="" uni="%"/>
<a abb="&" sym="" uni="&"/>
<a abb="(" sym="" uni="("/>
<a abb=")" sym="" uni=")"/>
<a abb="**" sym="" uni="∗"/>
<a abb="*A" sym="" uni="A"/>
<a abb="*B" sym="" uni="B"/>
<a abb="*C" sym="" uni="Ξ"/>
<a abb="*D" sym="" uni="∆"/>
<a abb="*E" sym="" uni="E"/>
<a abb="*F" sym="" uni="Φ"/>
<a abb="*G" sym="" uni="Γ"/>
<a abb="*H" sym="" uni="Θ"/>
<a abb="*I" sym="" uni="I"/>
<a abb="*K" sym="" uni="K"/>
<a abb="*L" sym="" uni="Λ"/>
<a abb="*M" sym="" uni="M"/>
<a abb="*N" sym="" uni="N"/>
<a abb="*O" sym="" uni="O"/>
<a abb="*P" sym="" uni="Π"/>
<a abb="*Q" sym="" uni="Ψ"/>
<a abb="*R" sym="" uni="P"/>
<a abb="*S" sym="" uni="Σ"/>
<a abb="*T" sym="" uni="T"/>
<a abb="*U" sym="" uni="Υ"/>
<a abb="*W" sym="" uni="Ω"/>
<a abb="*X" sym="" uni="X"/>
<a abb="*Y" sym="" uni="H"/>
<a abb="*Z" sym="" uni="Z"/>
<a abb="*a" sym="" uni="α"/>
<a abb="*b" sym="" uni="β"/>
<a abb="*c" sym="" uni="ξ"/>
<a abb="*d" sym="" uni="δ"/>
<a abb="*e" sym="" uni=""/>
<a abb="*f" sym="" uni="φ"/>
<a abb="*g" sym="" uni="γ"/>
<a abb="*h" sym="" uni="θ"/>
<a abb="*i" sym="" uni="ι"/>
<a abb="*k" sym="" uni="κ"/>
<a abb="*l" sym="" uni="λ"/>
<a abb="*m" sym="" uni="μ"/>
<a abb="*n" sym="" uni="ν"/>
<a abb="*o" sym="" uni="ο"/>
<a abb="*p" sym="" uni="π"/>
<a abb="*q" sym="" uni="ψ"/>
<a abb="*r" sym="" uni="ρ"/>
<a abb="*s" sym="" uni="σ"/>
<a abb="*t" sym="" uni="τ"/>
<a abb="*u" sym="" uni="υ"/>
<a abb="*w" sym="" uni="ω"/>
<a abb="*x" sym="" uni="χ"/>
<a abb="*y" sym="" uni="η"/>
<a abb="*z" sym="" uni="ζ"/>
<a abb="+-" sym="" uni="±"/>
<a abb="+f" sym="" uni="ϕ"/>
<a abb="+h" sym="" uni="ϑ"/>
<a abb="+p" sym="" uni="ϖ"/>
<a abb="," sym="" uni=","/>
<a abb="->" sym="" uni="→"/>
<a abb="." sym="" uni="."/>
<a abb="/" sym="" uni="/"/>
<a abb="/_" sym="" uni="∠"/>
<a abb="0" sym="" uni="0"/>
<a abb="1" sym="" uni="1"/>
<a abb="2" sym="" uni="2"/>
<a abb="3" sym="" uni="3"/>
<a abb="3d" sym="" uni="∴"/>
<a abb="4" sym="" uni="4"/>
<a abb="5" sym="" uni="5"/>
<a abb="6" sym="" uni="6"/>
<a abb="7" sym="" uni="7"/>
<a abb="8" sym="" uni="8"/>
<a abb="9" sym="" uni="9"/>
<a abb=":" sym="" uni=":"/>
<a abb=";" sym="" uni=";"/>
<a abb="<" sym="" uni="<"/>
<a abb="<-" sym="" uni="←"/>
<a abb="<=" sym="" uni="≤"/>
<a abb="<>" sym="" uni="↔"/>
<a abb="=" sym="" uni="="/>
<a abb="==" sym="" uni="≡"/>
<a abb="=~" sym="" uni="≅"/>
<a abb=">" sym="" uni=">"/>
<a abb=">=" sym="" uni="≥"/>
<a abb="?" sym="" uni="?"/>
<a abb="AN" sym="" uni="∧"/>
<a abb="Ah" sym="" uni="ℵ"/>
<a abb="CL" sym="" uni="♣"/>
<a abb="CR" sym="" uni="↵"/>
<a abb="DI" sym="" uni="♦"/>
<a abb="Eu" sym="" uni="€"/>
<a abb="HE" sym="" uni="♥"/>
<a abb="Im" sym="" uni="ℑ"/>
<a abb="OR" sym="" uni="∨"/>
<a abb="Re" sym="" uni="ℜ"/>
<a abb="SP" sym="" uni="♠"/>
<a abb="[" sym="" uni="["/>
<a abb="]" sym="" uni="]"/>
<a abb="_" sym="" uni="_"/>
<a abb="ap" sym="" uni="~"/>
<a abb="arrowvertbt" sym="" uni="⇓"/>
<a abb="arrowverttp" sym="" uni="⇑"/>
<a abb="c*" sym="" uni="⊗"/>
<a abb="c+" sym="" uni="⊕"/>
<a abb="ca" sym="" uni="∩"/>
<a abb="cu" sym="" uni="∪"/>
<a abb="da" sym="" uni="↓"/>
<a abb="de" sym="" uni="°"/>
<a abb="di" sym="" uni="÷"/>
<a abb="es" sym="" uni="∅"/>
<a abb="f/" sym="" uni="∕"/>
<a abb="fa" sym="" uni="∀"/>
<a abb="fm" sym="" uni="′"/>
<a abb="gr" sym="" uni="∇"/>
<a abb="hA" sym="" uni="⇔"/>
<a abb="ib" sym="" uni="⊆"/>
<a abb="if" sym="" uni="∞"/>
<a abb="integral" sym="" uni="∫"/>
<a abb="ip" sym="" uni="⊇"/>
<a abb="lA" sym="" uni="⇐"/>
<a abb="la" sym="" uni="〈"/>
<a abb="lz" sym="" uni="◇"/>
<a abb="mi" sym="" uni="−"/>
<a abb="mo" sym="" uni="∈"/>
<a abb="mu" sym="" uni="×"/>
<a abb="nb" sym="" uni="⊄"/>
<a abb="nm" sym="" uni="∉"/>
<a abb="no" sym="" uni="¬"/>
<a abb="pd" sym="" uni="∂"/>
<a abb="pl" sym="" uni="+"/>
<a abb="pp" sym="" uni="⊥"/>
<a abb="product" sym="" uni="∏"/>
<a abb="pt" sym="" uni="∝"/>
<a abb="rA" sym="" uni="⇒"/>
<a abb="ra" sym="" uni="〉"/>
<a abb="sb" sym="" uni="⊂"/>
<a abb="sd" sym="" uni="″"/>
<a abb="sp" sym="" uni="⊃"/>
<a abb="st" sym="" uni="∍"/>
<a abb="sum" sym="" uni="∑"/>
<a abb="te" sym="" uni="∃"/>
<a abb="ts" sym="" uni="ς"/>
<a abb="u2026" sym="" uni="…"/>
<a abb="u2320" sym="" uni="⌠"/>
<a abb="u2321" sym="" uni="⌡"/>
<a abb="ua" sym="" uni="↑"/>
<a abb="wp" sym="" uni="℘"/>
<a abb="~=" sym="" uni="≈"/>
或者我也可以创建这些无效 UNICODE 点的查找字符串和位置匹配的正确 UNICODE 点的字符串:
join -t\| -1 2 -2 2 symbol.map.dat unicode.map.dat |sed -e 's~\([^|]*\)|\([^|]*\)|\([^|]*\)~\1|\&#x\2;|\&#x\3;~' > symbol-unicode.map.dat
echo '<a sym="'$(cut -d\| -f2 symbol-unicode.map.dat |tr -d '\n')'" uni="'$(cut -d\| -f3 symbol-unicode.map.dat |tr -d '\n')'"/>'
这给了我:
<a sym=""
uni="≃!≠#%&()∗ABΞ∆EΦΓΘIKΛMNOΠΨPΣTΥΩXHZαβξδφγθικλμνοπψρστυωχηζ±ϕϑϖ,→./∠0123∴456789:;<←≤↔=≡≅>≥?∧ℵ♣↵♦€♥ℑ∨ℜ♠[]_~⇓⇑⊗⊕∩∪↓°÷∅∕∀′∇⇔⊆∞∫⊇⇐〈◇−∈×⊄∉¬∂+⊥∏∝⇒〉⊂″⊃∍∑∃ς…⌠⌡↑℘≈">
顺便说一句,Stack Exchange 平台有一个有趣的地方,我可以向您展示我在这里的符号,首先是坏的,它可能会全部显示为框,除非您调整本地 CSS @987654328 @:
现在是 UNIICODE 字符串:
≃!≠#%&()∗ABΞ∆EΦΓΘIKΛMNOΠΨPΣTΥΩXHZαβξδφγθικλμνοπψρστυωχηζ±φϑϖ,→./∠0123∴456789:;≥?∧ℵ♣↨↵♦€♥ℑℨ↨↵€♥ []_~⇓⇑⊗⊕∩∪↓°÷∅∕∀′∇⇔⊆∞∫⊇⇐〈◇−∈×⊄∉¬∂+⊥∏∝⇒〉⊂″⊃∍∑∃ς…⌠⌡↑ ℘≈
很漂亮。
也许它可以帮助其他需要快速实用解决方案的相同问题的人。不客气。
【讨论】:
我将添加一条评论,指出我的结果中的错误,除了由于 abb 属性值导致的映射元素中的一些 XML 格式正确问题,我们看到希腊 epsilon ε 没有出来,&#xEFEC;
应该是&#x03B5;
。第一个字符也是错误的,想知道我的管道分隔符是否导致了这种情况。但足够公平。以上是关于Windows“符号”或 WGL4 字体代码指向 UNICODE 映射?的主要内容,如果未能解决你的问题,请参考以下文章