我在将字符串转换为 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/