java - 字符串UTF-8转换问题

标签 java

我在将字符串转换为 UTF-8 时遇到问题。基本上,我开发了一个 DayDescriptionEnum ,它实际上会获取星期几并相应地返回描述。请参阅下面的代码。

public enum DayDescriptionEnum {

    SUNDAY(1, "Sunday", "\\u0627\\u0644\\u0623\\u062d\\u062f"),
    MONDAY(2, "Monday", "\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646"),
    TUESDAY(3, "Tuesday", "\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621"),
    WEDNESDAY(4, "Wednesday", "\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621"),
    THURSDAY(5, "Thursday", "\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633"),
    FRIDAY(6, "Friday", "\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629"),
    SATURDAY(7, "Saturday", "\\u0627\\u0644\\u0633\\u0628\\u062a");

    private long dayofWeek;
    private String dayDescriptionEnglish;
    private String dayDescriptionArabic;

    private DayDescriptionEnum(long dayofWeek, String dayDescriptionEnglish, String dayDescriptionArabic) {
        this.dayofWeek = dayofWeek;
        this.dayDescriptionEnglish = dayDescriptionEnglish;
        this.dayDescriptionArabic = dayDescriptionArabic;
    }

    public long getDayofWeek() {
        return dayofWeek;
    }

    public String getDayDescriptionEnglish() {
        return dayDescriptionEnglish;
    }

    public String getDayDescriptionArabic() {

        return dayDescriptionArabic;
    }
}


  public static DayDescriptionEnum getDescriptionOfDay(long dayOfWeek){
        DayDescriptionEnum dayDescriptionEnum = DayDescriptionEnum.SUNDAY;

        if(PermitReportConstants.SUNDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.SUNDAY;
        }

        if(PermitReportConstants.MONDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.MONDAY;
        }

        if(PermitReportConstants.TUESDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.TUESDAY;
        }

        if(PermitReportConstants.WEDNESDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.WEDNESDAY;
        }

        if(PermitReportConstants.THURSDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.THURSDAY;
        }

        if(PermitReportConstants.FRIDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.FRIDAY;
        }

        if(PermitReportConstants.SATURDAY == dayOfWeek){
            dayDescriptionEnum =  DayDescriptionEnum.SATURDAY;
        }

        return dayDescriptionEnum;
    }

上述方法获取星期几并相应地返回枚举。现在,当我显示该字符串时,其显示描述为“\u0627\u0644\u0623\u062d\u062f”相同。我研究并意识到我需要将字符串转换为 UTF-8 格式。所以我把下面的代码写成

byte[] utf8Bytes = null ;
        try {
             utf8Bytes = dayDescriptionEnum.getDayDescriptionArabic().getBytes("UTF-8");
            String arabicDescription = new String(utf8Bytes,"UTF-8");
            readyToPrintDeliver.setContractDayDescAr(arabicDescription);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

还是没有效果。我的问题是,我已经将字符串转换为 unicode。我在哪里犯了错误?请帮忙。

谢谢。

最佳答案

UTF-8 在这里是一个转移注意力的东西。您根本不需要转换为 UTF-8 然后再转换回来 - 您只需修复字符串,这样就不会转义反斜杠:

SUNDAY(1, "Sunday", "\u0627\u0644\u0623\u062d\u062f"),
// etc

在字符串文字中,\\ 用于反斜杠字符 - 因此在原始代码中,字符串真正包含反斜杠、u 字符和十六进制数字。 ..唯一转义序列是重复的\\。您不希望这样 - 您只需要 Unicode 字符,使用 \uXXXX 作为 Unicode 转义序列。

使用上面的代码,您根本不需要转换 - 只需使用:

readyToPrintDeliver.setContractDayDescAr(dayDescriptionEnum.getDayDescriptionArabic());

关于java - 字符串UTF-8转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482084/

相关文章:

java - PreparedStatement 抛出语法错误

java - 从 bufferedreader 获取空值

java - Liquibase Java,变更集不适用

java - Spring Integration动态流线程问题

java - 为什么我们可以使用 'this'作为实例方法参数?

java - 在java程序中执行bash命令

java - 如何在 IntelliJ IDEA 中自动完成 lambda?

java - 迭代二进制搜索未完成

java - getRowSorter 相当于 Java 1.4 中的 JTable

java - java中memcached中设置操作的IOException