在Java中正确地将文本从MS Word(“windows-1252”?)转换为utf-8

时间:2017-11-30 19:42:31

标签: java unicode utf-8 windows-1252

我维护一个在Windows上运行但在Linux机器上写入MariaDB的Java webapp。 webapp有一个textarea(实际上很多),用户通常希望从MS Word文档中粘贴文本。

此webapp的旧版本在小型Windows服务器上运行,在该框上写入mysql。虽然它存在一些操作问题,但仍然有效。

由于我已将应用程序移植到Linux,当用户将文本粘贴到具有“特殊”字符(项目符号,短划线,智能引号等)的表单中时,保存到MariaDB失败,因为某些字符是在UTF-8中无效。

所以,我想我需要实现某种字符集转换。正确地做到这一点似乎相当困难。基本思路很简单。

我创建了一个包含以下可视内容的小Word文档:

•   This is an item – with a dash

然后我尝试将其粘贴到Textpad中并将该文件保存到磁盘。我用“od -x”转储内容,然后反转字节,然后将它们放入一个字节数组中,如下所示:

byte[] data = {(byte)0x95, 0x09, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x20, (byte)0x96, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x64, 0x61, 0x73, 0x68, 0x00};

我希望这反映出“windows-1252”编码,但我真的不知道。

然后我尝试将其转换为UTF-8:

byte[] utf8Data = new String(data, "windows-1252").getBytes("UTF-8");

然后我打印了字符串,结果是:

• This is an item – with a dash

我不确定我在这里做什么,或者是否甚至可以完全做到这一点。

我还需要在webapp本身中确定我希望表单中的文本使用什么字符编码。我真的不想假设它是“windows-1252”。

我的大脑受伤了。

0 个答案:

没有答案