【问题标题】:Character Encoding not working for Japanese ,Chinese and Korean字符编码不适用于日文、中文和韩文
【发布时间】:2016-11-08 02:20:33
【问题描述】:

我有适用于所有欧洲国家和少数亚洲国家(如日本、中国、韩国)的 Unicode 字符。除日本、中国、韩语外,所有 Unicode 都适用于欧洲国家/地区。

以日本为例:

dear_name=\u30c7\u30a3\u30fc\u30e9\u30fc

以中国为例:

dear_name=\u4eb2\u7231\u7684

韩语示例:

dear_name=\uce5c\uc560\ud558\ub294

瑞典的例子(这个工作正常):

dear_name=Till

默认字符编码为 UTF-8。

Template template = VelocityFactory.getTemplate("test.vm", "UTF-8");
   String messageText = VelocityFactory.merge(context, template, charset);

在调试合并方法时,我发现合并的结果在此处被抓取为中文、日文、韩文。

public static String merge(VelocityContext context, Template template, String charset) throws Exception {

        String newResult = null;

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        OutputStreamWriter streamWriter;
        if(charset != null && charset.length() > 0) {
            streamWriter = new OutputStreamWriter(outputStream, charset);
        } else {
            streamWriter = new OutputStreamWriter(outputStream);
        }

        template.merge(context, streamWriter);
        streamWriter.close(); 

        mergedResult = outputStream.toString();                 
        outputStream.close();

        return newResult;        
    }
}

以下是邮件模板,仅对于标题,它以正确的格式显示日文、中文和韩文,但不适用于正文:

<html>
    <head>      
        <meta http-equiv="Content-Type" content="$contentType">
    </head>
    <body>
        <div id="content">
            <table border="0" cellpadding="0" cellspacing="0" style="margin-left: 0px;">
                <tr>
                    <td>
                        <table border="0" cellpadding="0" cellspacing="0" class="textBody" style="margin-bottom: 120px;">
                            <tr>
                                <td valign="bottom" class="mainHeader" nowrap>
                                    $velocityUtils.getMessage("test")
                                </td>
                            </tr>
                            <tr>
                                <td colspan="2">
                                    <img src="$imageBar" class="clipped">
                                </td>
                            </tr>
                        </table>
                        <div id="info" class="textBody">$velocityUtils.getMessage("test1")<br><br></div>    
                    </td>
                </tr>
            </table>
        </div>
    </body>
</html>

任何信息如何解决这个问题?如何正确编码??

【问题讨论】:

    标签: java unicode encoding character-encoding streamwriter


    【解决方案1】:

    您需要指定日文、韩文和中文的字符集

    For japanese try: charset=iso-2022-jp
    For korean try: charset=iso-2022-kr
    For chinese try: charset=big5
    

    【讨论】:

    • 谢谢 ..我只在向用户发送电子邮件时遇到此问题,并且所有亚洲语言的标题部分都正确显示,但正文被抓住了
    • 电子邮件客户端使用标题中定义的内容类型,而不是元标记中定义的......所以你最安全的选择是将正文内容,即所有特殊字符转换为它们的 HTML 实体,你赢了不必再担心标题 Content-Type...使用在线转换器工具来转换您的内容>>> example converter tool
    【解决方案2】:

    尝试将其添加到 JSP 的顶部

    <%@ page language="java" pageEncoding="UTF-8"%>
    

    【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2023-03-16
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多