微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Java将Windows-1252转换为UTF-16

我试图将所有Windows特殊字符转换为其Unicode等效字符.我们有一个Flex应用程序,用户可以在其中保存一些Rich Text,然后通过Java Emailer通过电子邮件发送给他们的收件人.但是,我们继续遇到Word的特殊字符,这些字符只是在电子邮件显示为?

到目前为止我已经尝试过了

 private String replaceWordChars(String text_in) {
    String s = text_in;

    // smart single quotes and apostrophe
    s = s.replaceAll("[\\u2018|\\u2019|\\u201A]", "\'");
    // smart double quotes
    s = s.replaceAll("[\\u201C|\\u201D|\\u201E]", "\"");
    // ellipsis
    s = s.replaceAll("\\u2026", "...");
    // dashes
    s = s.replaceAll("[\\u2013|\\u2014]", "-");
    // circumflex
    s = s.replaceAll("\\u02C6", "^");
    // open angle bracket
    s = s.replaceAll("\\u2039", "<");
    // close angle bracket
    s = s.replaceAll("\\u203A", ">");
    // spaces
    s = s.replaceAll("[\\u02DC|\\u00A0]", " ");

    return s;

哪个有效,但我不想将所有Windows-1252字符编码为等效的UTF-16(假设这是认的Java字符集)

但是,我们的用户不断从Microsoft Word中找到Java无法处理的更多字符.所以我搜索搜索了这个例子

private String replaceWordChars(String text_in) {
    String s = text_in;
    try {
        byte[] b = s.getBytes("Cp1252");
        byte[] encoded = new String(b, "Cp1252").getBytes("UTF-16");
        s = new String(encoded, "UTF-16");


    } catch (UnsupportedEncodingException e) {
        // Todo Auto-generated catch block
        e.printstacktrace();
    }

    return s;

但是,当我在Eclipse调试器中观察编码时,没有任何变化.

必须有一个简单的解决方案来处理微软可爱的Java编码.

有什么想法吗?

解决方法:

您可以尝试使用java.nio.charset.Charset:

final Charset windowsCharset = Charset.forName("windows-1252");
final Charset utfCharset = Charset.forName("UTF-16");
final CharBuffer windowsEncoded = windowsCharset.decode(ByteBuffer.wrap(new byte[] {(byte) 0x91}));
final byte[] utfEncoded = utfCharset.encode(windowsEncoded).array();
System.out.println(new String(utfEncoded, utfCharset.displayName()));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐