获取 Java 中的原始字符串,在遗留应用程序中以未知格式编码
Get original string in Java, encoded in unknown format in legacy application
我正在尝试获取以未知格式编码的原始字符串。我不知道它在遗留应用程序中使用什么编码。
例如用户在遗留系统中输入Special[Home]^
,它会将“Special¢Home!¬
”保存到DB2数据库中。
它在遗留系统中正常工作,它以正确的格式编码和解码为 Special[Home]^
。
当我尝试从 Java 应用读取相同数据 Special[Home]^
时,它显示为 Special¢Home!¬
我也尝试使用下面显示的代码找到正确的编码,但没有用。任何帮助将不胜感激。
@Test
public void charsetTest() {
String encodedString = "Special¢Home!¬";
String originalString = "Special[Home]^";
Map<String, Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
Charset charset = availableCharsets.get(key);
try {
String decodedString = new String(charset.encode(encodedString).array(), charset);
System.out.println(decodedString + ": " + charset);
if (originalString.equals(decodedString)) {
System.out.println("match found: -> " + originalString + ": " + charset);
}
} catch (UnsupportedOperationException e) {
/* e.printStackTrace(); */
}
}
}
考虑到双重转换的可能性,试试这个代码:
public static void main(String[] arg) {
String encodedString = "Special¢Home!¬";
String originalString = "Special[Home]^";
Map<String, Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
for (String key2 : keySet) {
Charset charset = availableCharsets.get(key);
Charset charset2 = availableCharsets.get(key2);
try {
String decodedString = new String(charset.encode(encodedString).array(), charset2);
if (originalString.equals(decodedString)) {
System.out.println(originalString + ": " + charset + " -> " + charset2);
}
} catch (UnsupportedOperationException e) {
/* e.printStackTrace(); */
}
}
}
}
它产生了一些组合。
output:
Special[Home]^: IBM-Thai -> x-IBM1166
Special[Home]^: IBM-Thai -> x-IBM875
Special[Home]^: IBM01140 -> IBM01148
Special[Home]^: IBM01140 -> IBM500
Special[Home]^: IBM01140 -> IBM870
...
我正在尝试获取以未知格式编码的原始字符串。我不知道它在遗留应用程序中使用什么编码。
例如用户在遗留系统中输入Special[Home]^
,它会将“Special¢Home!¬
”保存到DB2数据库中。
它在遗留系统中正常工作,它以正确的格式编码和解码为 Special[Home]^
。
当我尝试从 Java 应用读取相同数据 Special[Home]^
时,它显示为 Special¢Home!¬
我也尝试使用下面显示的代码找到正确的编码,但没有用。任何帮助将不胜感激。
@Test
public void charsetTest() {
String encodedString = "Special¢Home!¬";
String originalString = "Special[Home]^";
Map<String, Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
Charset charset = availableCharsets.get(key);
try {
String decodedString = new String(charset.encode(encodedString).array(), charset);
System.out.println(decodedString + ": " + charset);
if (originalString.equals(decodedString)) {
System.out.println("match found: -> " + originalString + ": " + charset);
}
} catch (UnsupportedOperationException e) {
/* e.printStackTrace(); */
}
}
}
考虑到双重转换的可能性,试试这个代码:
public static void main(String[] arg) {
String encodedString = "Special¢Home!¬";
String originalString = "Special[Home]^";
Map<String, Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
for (String key2 : keySet) {
Charset charset = availableCharsets.get(key);
Charset charset2 = availableCharsets.get(key2);
try {
String decodedString = new String(charset.encode(encodedString).array(), charset2);
if (originalString.equals(decodedString)) {
System.out.println(originalString + ": " + charset + " -> " + charset2);
}
} catch (UnsupportedOperationException e) {
/* e.printStackTrace(); */
}
}
}
}
它产生了一些组合。
output:
Special[Home]^: IBM-Thai -> x-IBM1166
Special[Home]^: IBM-Thai -> x-IBM875
Special[Home]^: IBM01140 -> IBM01148
Special[Home]^: IBM01140 -> IBM500
Special[Home]^: IBM01140 -> IBM870
...