Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串UTF-8转换问题_Java - Fatal编程技术网

Java 字符串UTF-8转换问题

Java 字符串UTF-8转换问题,java,Java,我在将字符串转换为UTF-8时遇到了一个问题。基本上,我已经开发了一个DayDescriptionEnum,它实际上会得到一周中的某一天,并相应地返回描述。请看下面的代码 public enum DayDescriptionEnum { SUNDAY(1, "Sunday", "\\u0627\\u0644\\u0623\\u062d\\u062f"), MONDAY(2, "Monday", "\\u0627\\u0644\\u0625\\u062b\\u0646\\u064

我在将字符串转换为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和UTF-8,您只需要修复字符串,这样就不会逃逸反斜杠:

SUNDAY(1, "Sunday", "\u0627\u0644\u0623\u062d\u062f"),
// etc
在字符串文本中,
\\
用于反斜杠字符-因此在原始代码中,字符串真正包含反斜杠、
u
字符和十六进制数字。。。唯一的转义序列是重复的
\\
。您不需要这样做-您只需要Unicode字符,使用
\uxxx
作为Unicode转义序列

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

readyToPrintDeliver.setContractDayDescAr(dayDescriptionEnum.getDayDescriptionArabic());

大多数IDE支持UTF-8编码。虽然使用unicode更具可移植性,但在代码中以本机方式键入所需字符可能更自然

public enum DayDescriptionEnum {

    SUNDAY(1, "Sunday", "الأحد"),
    MONDAY(2, "Monday", "الإثنين"),
    TUESDAY(3, "Tuesday", "الثلاثاء"),
    WEDNESDAY(4, "Wednesday", "الأربعاء"),
    THURSDAY(5, "Thursday", "الخميس"),
    FRIDAY(6, "Friday", "الجمعة"),
    SATURDAY(7, "Saturday", "السبت");

这可以很好地编译和运行,如果您能阅读阿拉伯语,那么使用和检查可能会更容易。

字符串中有两个黑色斜杠,这意味着您用第一个反斜杠转义第二个反斜杠,并且无法识别unicode字符。只使用一个反斜杠。不要使用\,只使用\。使用\\正在转义UTF为什么要转换为UTF-8并再次转换为UTF-8?转换为UTF-8并再次转换对有效字符无效。我很高兴它没有改变字符串。非常感谢大家。成功了,小姐。非常感谢@Jon。我也有同样的困惑,我已经给出了UTF-8中的字符串,为什么我需要将它转换回来。因为它没有转换回来,所以我做了这个。让我再试一次。非常感谢。成功了。我只是喜欢这个地方。谢谢