Java Shift JIS编码字符串的不同字体

Java Shift JIS编码字符串的不同字体,java,character-encoding,character,non-ascii-characters,shift-jis,Java,Character Encoding,Character,Non Ascii Characters,Shift Jis,在Java中,我从以Shift-JIS格式编码的文件中读取字节数组,但获取的字符串中字符的“样式”看起来与普通字符串不同(更宽?)。 下面是我对“P”字母的意思的一个例子: P - P 正如您所看到的,在Shift JIS中的第一个与第二个看起来不同。是否有一种方法可以使用“普通”字符,即使是Shift JIS字符串? 我正在使用这段代码执行转换: String jis = new String(byteArray, Charset.forName("Shift_JIS")); 下表显示了J2

在Java中,我从以Shift-JIS格式编码的文件中读取字节数组,但获取的字符串中字符的“样式”看起来与普通字符串不同(更宽?)。 下面是我对“P”字母的意思的一个例子:
P - P
正如您所看到的,在Shift JIS中的第一个与第二个看起来不同。是否有一种方法可以使用“普通”字符,即使是Shift JIS字符串?
我正在使用这段代码执行转换:

String jis = new String(byteArray, Charset.forName("Shift_JIS"));

下表显示了J2SE 5.0支持的
日语编码集。新java.nio API使用的规范名称在许多情况下与java.io和java.lang API中使用的名称不同。你可以使用另一种日文字体

----------------------------------------------------------------------------------------------
|Canonical Name for  | Canonical Name for java.io  |               Description               |
|   java.nio API     |      and java.lang API      |                                         |
----------------------------------------------------------------------------------------------
|      EUC-JP        |           EUC_JP            | JISX 0201, 0208 and 0212, EUC encoding  | 
|                    |                             |               Japanese                  |
----------------------------------------------------------------------------------------------
|    ISO-2022-JP     |         ISO2022JP           | JIS X 0201, 0208, in ISO 2022 form,     | 
|                    |                             |               Japanese                  |
----------------------------------------------------------------------------------------------
|      Shift_JIS     |             SJIS            |            Shift-JIS, Japanese          | 
----------------------------------------------------------------------------------------------
|    windows-31j     |           MS932             |             Windows Japanese            | 
----------------------------------------------------------------------------------------------
|  x-euc-jp-linux    |        EUC_JP_LINUX         | JISX 0201, 0208, EUC encoding Japanese  | 
----------------------------------------------------------------------------------------------
|   x-eucJP-Open     |       EUC_JP_Solaris        | JISX 0201, 0208, 0212, EUC encoding     | 
|                    |                             |               Japanese                  |
----------------------------------------------------------------------------------------------
|     x-IBM33722     |           Cp33722           | IBM-eucJP - Japanese (superset of 5050) | 
----------------------------------------------------------------------------------------------
|      x-IBM930      |            Cp930            | Japanese Katakana-Kanji mixed with 4370 | 
|                    |                             |         UDC, superset of 5026           |
----------------------------------------------------------------------------------------------
|      x-IBM939      |            Cp939            | Japanese Latin Kanji mixed with 4370    | 
|                    |                             |         UDC, superset of 5035           |
----------------------------------------------------------------------------------------------
|      x-IBM942      |            Cp942            |  IBM OS/2 Japanese, superset of Cp932   | 
----------------------------------------------------------------------------------------------
|      x-IBM943      |            Cp943            | IBM OS/2 Japanese, superset of Cp932    | 
|                    |                             |         and Shift-JIS                   |
----------------------------------------------------------------------------------------------
资源链接:
严格地说,这些是不同的字符。第一个
是Unicode中的
全宽拉丁大写字母P
,来自日本JIS X 0208字符集(U+FF30)。第二个
P
是ASCII(U+0050)中的
拉丁大写字母P

因此,必须将全宽字符转换为半宽字符。你可以用ICU4J来做这件事

transiterator-transiterator=transiterator.getInstance(“半宽-全宽”);
字符串结果=音译。音译(“P - (P);;
System.out.println(结果);//你会得到“P-P”

我都试过了,对其中许多人来说,生成的字符串又有了那种奇怪的外观,而对另一些人来说,字符串根本没有正确编码。谢谢,这很有效。答案中只有一个小错误:应该是全宽半宽,对吗?