我开发了一个编码和解码GB1830的小型编码器类。我需要这个来读写Dicom文件,可以使用GB1830。对于那些没有参与这些事情的人来说,GB1830是一个中文多字节编码(1,2或4个字节),它覆盖与Unicode相同的代码点(超过1.1M),但是具有非常复杂的映射,使其与旧的中国标准(GBK)兼容。
但在Windows上,这比我预期的要简单:
Type
GB18030String = Type AnsiString(54936);
Class Procedure TMEGB18030Encoder.Decode(Const Input: TMEStreamHandler; Const Output: TMEMultiCharSetString);
Var
sGB18030: GB18030String;
sUTF16LE: UnicodeString;
Begin
sGB18030 := AnsiStringOf(Input.ReadRawByteString, 54936);
sUTF16LE := UnicodeString(sGB18030);
TMEUTF16LEEncoder.Decode(RawByteStringOf(sUTF16LE), Output);
End;
Class Procedure TMEGB18030Encoder.Encode(Const Input: TMEMultiCharSetString; Const Output: TMEStreamHandler);
Var
sUTF16LE: UnicodeString;
sGB18030: GB18030String;
Begin
sUTF16LE := StringOf(TMEUTF16LEEncoder.Encode(Input));
sGB18030 := GB18030String(sUTF16LE);
Output.WriteRawByteString(RawByteStringOf(AnsiString(sGB18030)));
End;
这基本上使用AnsiString,代码页为54936,让操作系统处理GB1830和Unicode(UTF16LE)的转换。
但显然这段代码不会在Android上进行事件编译,因为没有AnsiStrings,而且我认为对Windows代码页的支持不多。但我可能错了,因为我实际上正在调用LocaleCharsFromUnicode,我认为这是在非Windows平台上模拟的。
所有这些都需要进行单元测试...但如果我甚至找不到在Android上重新编译此代码的方法,我认为无法开始测试它。任何提示或想法?