将Shift JIS中的拉丁字符转换为Unicode中的拉丁字母

本文关键字:转换 拉丁字母 字符 Unicode JIS Shift 丁字符 | 更新日期: 2023-09-27 18:19:58

我正在分析二进制数据中带有Shift-JIS编码字符串的文件。我当前的代码是:

public static string DecodeShiftJISString(this byte[] data, int index, int length)
{
    byte[] utf8Bytes = Encoding.Convert(Encoding.GetEncoding(932), Encoding.UTF8, data);
    return Encoding.UTF8.GetString(utf8Bytes);
}

它工作得很好,我能够从这个方法中获得可用的字符串,尽管当我在WinForms应用程序中显示带有拉丁字符的字符串时,我发现这些字符比正常情况下要宽。

Shift JIS字符串中的拉丁字符

我不确定这是我的编码逻辑问题,还是我应该显示字符串的方式问题(我只是将它们直接传递到我的控件中)。任何帮助都将不胜感激!

将Shift JIS中的拉丁字符转换为Unicode中的拉丁字母

这些不是普通的ASCII字符,它们是"全宽变体",范围为U+FF01全宽感叹号向上。它们用于在设置拉丁和CJK字符的混合时排列格式。

Unicode更喜欢这样的奇怪字符,它们只是现有字符在语义上相同的风格变体,而不存在。但它必须包括它们,以往返于像Shift-JIS这样的传统编码。因此,它们被称为兼容性字符。

通过使用"K"格式(如NFKC)的Unicode规范化,您可以将兼容字符转换为其基本变体。在Win32中,可以使用NormalizeString()执行此操作。