imewlconverter
imewlconverter copied to clipboard
win10微软拼音适用性问题
问题描述: 使用本软件转换自定义的码表为win10微软拼音用户自定义短语时,对于中文字符,它的效果很好; 而对于非中文字符,即使关闭词条过滤,转换效果也并不理想——它会将希腊字符、拼音等转化为毫不相干的中文字符。 你们的项目对.dat文件头、词频(在这里是顺序)、拼音编码所做的工作非常出色,问题仅出现在对短语(用户想输出的词)的编码上。
一些建议: 我对本项目的源代码进行了研究(实际上我并不掌握C#,我只是懂一点Java),问题似乎出现在下面的语句中。
var py = wl.GetPinYinString("", BuildType.None); bw.Write(Encoding.Unicode.GetBytes(py)); bw.Write(BitConverter.GetBytes((short) 0)); bw.Write(Encoding.Unicode.GetBytes(wl.Word));
限于时间,我没能对此上述代码进行深入研究,但下面的信息或许对你们有所帮助。 在win10微软拼音程序正常导出的用户自定义短语的.dat文件中,它对短语的编码过程大概是这样的:
- 对于短语
s
,先把s
存储为字符串; - 将
s
转化为不大于4位数的16进制整型的Unicode值uhex
,字母全部用大写; 3.【关键一步】:若uhex
不足4位,则在uhex
左侧填充若干个数字0,直到uhex
变为4位数; - 此时
uhex
的形式为形如abcd
的4位16进制数,将其对调为cdab
即为字符s
在.dat文件中的16进制编码。 如:拼音á
的字符串对应的16进制整形Unicode值为E1
,其在.dat文件中的正确编码为00E1
。
实际上你说的编码不就是 utf-16le? 另外关于转换问题最好提供一个测试词库并说明预期结果。
详细信息已经包含在邮箱附件中,请阅读压缩包内的PDF说明文档,压缩包内还包含了相关的测试文件。
------------------ Original ------------------ From: "studyzy/imewlconverter" @.>; Date: Thu, Jun 30, 2022 06:55 PM @.>; @.@.>; Subject: Re: [studyzy/imewlconverter] win10微软拼音适用性问题 (Issue #220)
实际上你说的编码不就是 utf-16le? 另外关于转换问题最好提供一个测试词库并说明预期结果。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
你是只给作者本人发的?,他不常在线,最好公开出来,大家一起讨论。
看了一下是编码格式自动检测出错了,手动转为utf-16le再转换就没问题了。
src\ImeWlConverterCore\Helpers\FileOperationHelper.cs
288行
看了一下是编码格式自动检测出错了,手动转为utf-16le再转换就没问题了。
src\ImeWlConverterCore\Helpers\FileOperationHelper.cs
288行
324行,最终问题就是如何区分 utf-8 和 gb18030。这里的实现有待改进。
看了一下是编码格式自动检测出错了,手动转为utf-16le再转换就没问题了。
src\ImeWlConverterCore\Helpers\FileOperationHelper.cs
288行324行,最终问题就是如何区分 utf-8 和 gb18030。这里的实现有待改进。
- 主流编辑器很少有判断编码这样的逻辑,建议给出转换后的预览窗口,由用户根据预览来判断是否符合其本意并决定是否切换为其他编码。
- 或者增加一种导入原始数据的方法:从剪贴板粘贴到文本区。
希望以上的建议对你们有用