Java 字符串UTF-8转换问题
我在将字符串转换为UTF-8时遇到了一个问题。基本上,我已经开发了一个DayDescriptionEnum,它实际上会得到一周中的某一天,并相应地返回描述。请看下面的代码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
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中的字符串,为什么我需要将它转换回来。因为它没有转换回来,所以我做了这个。让我再试一次。非常感谢。成功了。我只是喜欢这个地方。谢谢