中文转英文存储
背景:
服务器存储文件时,中文名称无法读
方案一:
自定义英文先将字符串按指定编码转为byte数组,将byte转为英文(ASCII)
public static void main(String[] str) {
String odsStr = "晨报-獱ASDf——";
char[] newChars = null;
try {
//使用GBK编码转换字符串 -- 一个中文字符对应两个字节 --
byte[] odsBys = odsStr.getBytes("GBK");
newChars = new char[odsBys.length];
for (int i = 0; i < odsBys.length; i++) {
byte ob = odsBys[i];
//byte数据范围为 -128~127
//ASCII码: 65~90 - A~Z; 97~122 - a~z
int oi = (ob > 0) ? ob : -ob;
oi = oi % 58;
oi += 65;
if (oi > 90 && oi < 96) {
oi -= 6;
}
newChars[i] = (char) oi;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String newCharStr = String.valueOf(newChars);
System.out.println();
System.out.println("newCharStr: " + newCharStr);
}
方案二:
使用中文首字母
import net.sourceforge.pinyin4j.PinyinHelper;
/**
* 中文转英文存储
*
* 中文首字母,英文直接用,非中文使用 ‘0’分隔
* @param chineseName
* @return
*/
private String chToEn(String chineseName){
char[] charArray = chineseName.toCharArray();
StringBuilder enName = new StringBuilder();
for(char charAt : charArray){
//判断是否问中文
if(Character.toString(charAt).matches("[\\u4E00-\\u9FA5]+")){
String pinyin = PinyinHelper.toHanyuPinyinStringArray(charAt)[0];
//首字母
char initials = pinyin.toCharArray()[0];
enName.append(initials);
} else if ((charAt >= 'A' && charAt <= 'Z') || (charAt >= 'a' && charAt <= 'z') ) {
enName.append(charAt);
} else{
enName.append(REPORT_NAME_SEPARATE);
}
}
return enName.toString();
}