2012-02-24 113 views
1

所以我必须给我的Java应用程序提供一些参数,这些参数是从.bat文件中调用的。这样做会使参数具有系统的字符集编码,这会使某些字符显示错误。我想这将字符串从Windows charset转换为Java中的UTF 8

 String titulo; 

    titulo = new String (args[1].getBytes(),"Cp1252"); 

也试图与其他几个人从这个名单http://docs.oracle.com/javase/1.4.2/docs/guide/intl/encoding.doc.html并没有一个成功的。 我该怎么编码一个字符串从Windows charset到Java的UTF 8? 非常感谢!

问候,罗德里戈。

编辑:我在.bat给出的论点是马丁,输出(这是一个JLabel显示)显示此MartÝn。

+0

你已经试过“UTF-8”而不是“Cp1252”吗? – Hamed 2012-02-24 18:42:48

+0

你说过“某些字符显示错误”,但没有显示你如何显示字符串。我的猜测是问题出在输出端,而输入参数可能是正确的。 – 2012-02-24 18:45:34

+0

是的,我做了......它给了我不同的(仍然是错误的)人物。感谢您提醒我,虽然 – rMaero 2012-02-24 18:46:13

回答

2

Windows命令提示符cmd.exe实际上不使用CP1252。它使用的东西显然取决于系统;在西欧的系统上,它很可能是CP850。所以,你可以试试这个:

titulo = new String (args[1].getBytes(),"Cp850"); 

你可以看看code tables for cp850检查应该发生的事情:我是字节ED在拉丁语1(以及由此延伸,CP1252),并在CP850字节ED为Y 。因此:如果您从Java GUI打印“í”到cmd.exe,它将显示为“Ý”。 (但你似乎看到了相反的情况:终端上的“í”在GUI中显示为“Ý”..没有任何意义,cmd.exe应该将字节A1传递给Java,这应该解释为它作为“¡”..)

+0

然后,正确的解决方案是将.bat文件编码为CP850或更改控制台编码,而不是这种可怕的黑客攻击。 – 2012-02-24 23:35:06

+0

当然..问题是Windows上的大多数文本编辑器不支持CP850,并且无法更改控制台编码。 **编辑**只需阅读,您可以使用'chcp 1252'来更改控制台代码页,但这可能会破坏某些控制台应用程序 – Joni 2012-02-24 23:47:05

相关问题