language-agnostic - 检测 rtf 标记中的多字节和汉字

标签 language-agnostic unicode localization rtf multibyte

我正在尝试翻译解析 RTF 格式的消息(我需要保留格式标记,所以我不能使用您只需粘贴到 RichTextBox 中并获取 的技巧.PlainText出)

将字符串 a基bমূcOιd 的 RTF 代码直接粘贴到写字板中:

{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fswiss\fcharset128 MS PGothic;}{\f2\fnil\fcharset1 Shonar Bangla;}{\f3\fswiss\fcharset161{\*\fname Arial;}Arial Greek;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22 a\f1\fs24\'8a\'ee\f0\fs22 b\f2\fs24\u2478?\u2498?\f0\fs22 c\f3\fs24\'cf\'e9\f0\fs22 d\par
}

很难判断您是否与 RTF 没有太多关系。所以这就是我正在看的部分

\'8a\'ee\f0\fs22 b\f2\fs24\u2478?\u2498?\f0\fs22 c\f3\fs24\'cf\'e9

注意 (u+57FA) 是 \'8a\'ee 但是 মূ,这实际上是两个字符(\u2478?)和(\u2498?),是\u2478?\u2498? 这很好,但是 是两个单独的字符 Oι\'cf\'e9.

有没有一种方法可以确定我正在查看的内容是否应该是一个字符,例如 = \'bb\'f9 或两个字符 Oι = \'cf\'e9?

我在想也许 \lang 就是它,但事实并非如此,因为 \lang 从第一次设置时就没有改变。我已经考虑了字体中不同 Charset 值的不同代码页,但它似乎没有告诉我是否应该将两个彼此相邻的 Unicode 引用视为双字节字符与否。

如何判断我正在查看的字符应该是双字节(或多字节)还是单字节?

最佳答案

\'xx 转义表示字节,应使用 fcharset 编码进行解释。 (或者可能是 cchs。如果不存在,则返回到 ansicpg。)

您需要深入了解编码,以便能够确定单个 \'xx 序列是代表一个字符本身还是仅代表多字节字符的一部分;通常,在使用可用的任何库或操作系统接口(interface)将该字节字符串转换为 Unicode 字符串之前,您会将文本的每个部分作为一个单元来使用,以避免必须为 RTF 支持的每个代码页编写逐字节解析器。

\uxxxx? 转义表示 UTF-16 代码单元。这要简单得多,但 Word[pad] 只在不得已时才生成这种编码形式,因为它与早期的 RTF 版本不兼容。 (? 是接收方无法处理 Unicode 时的回退字符。)

所以:

  • 两个字符 表示为两个字节转义,因为与该段文本关联的字体使用希腊语单字节编码(字符集 161 = cp1253)。

  • 一个字符 表示为两个字节转义,因为与该段文本关联的字体使用的是日语多字节编码(字符集 128 = cp932 ≈ Shift-JIS)。在 Shift-JIS 中,前导 \'8a 字节表示即将到来的另一个字节,就像最高位设置范围内的其他各种字节一样(但不是全部)。

    <
  • মূ 这两个字符表示为 Unicode 代码单元转义,因为没有其他选择:没有任何包含孟加拉字符的 RTF 兼容代码页。 (ISCII 的代码页 57003 出现得晚得多。)

关于language-agnostic - 检测 rtf 标记中的多字节和汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257366/

相关文章:

perl - 使用 Perl 采用 Unicode 方式的 list

html - 样式化双向网站 CSS 最佳实践?

language-agnostic - OO语言中方法调用的不同语法

language-agnostic - 不存在 "game specific"库的游戏编程

c++ - 查找数组重复单元的最简单方法是什么?

c++ - 读取/存储不同类型的字符串(utf8/utf16/ansi)

string - 使用 Unicode Delphi 调用 DLL 时出错

language-agnostic - 完整的二叉搜索树插入

iPhone - 本地化字符串无法在设备上运行

ios - 使用 localizable.string 自定义解析错误代码?