提问人:Prince 提问时间:8/23/2023 最后编辑:Prince 更新时间:8/23/2023 访问量:84
日语全角字符 ー 在 Java 中转换为 SHIFT_JIS 时出现乱码 [duplicate]
Japanese fullwidth character ー is getting garbled when converted to SHIFT_JIS in Java [duplicate]
问:
在我的应用程序中,我正在从数据库(UTF-8)读取数据(日语文本),并尝试以SHIFT_JIS文件格式写入输出。但是,全角ー(移位JIS中的817C十六进制代码)被转换为?在输出文件中。
这是测试它的示例程序
public class ShiftJisTest {
public static void main(String[] args) {
String text = "東1-1";
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("output_data"), "SHIFT_JIS"))) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
東1?1
输出的十六进制代码值:
93 8C 82 50 3F 82 50
HEX 中的乱码字符:,预期为3F
81 7C
答:
0赞
g00se
8/23/2023
#1
看起来该角色不在Shift_Jis:
goose@t410:/tmp$ uniname '\uFF0D'
The name for codepoint \uFF0D is FULLWIDTH HYPHEN-MINUS
The char is -
goose@t410:/tmp$ echo -en '\uFF0D' | iconv -t SHIFT-JIS
iconv: illegal input sequence at position 0
评论
0赞
Kayaman
8/23/2023
尽管根据转换器的不同,它可以/应该转换为减号。
0赞
skomisa
8/23/2023
这也许可以解释OP的问题,但它并不能解决它。
0赞
g00se
8/23/2023
解决方案是不要使用不存在的字符。可以使用替换,但这是任意和主观的
0赞
skomisa
8/24/2023
不,这根本不是解决方案。解决方案是为正在处理的文本选择适当的编码。OP 的问题只是因为使用了不适当的编码。
0赞
g00se
8/24/2023
据推测,@Prince使用Shift_Jis是有原因的。如果他没有,那么解决方案很简单 - 使用 UTF-8。
评论
0x817C
3F/?