Java 11中如何将"\303\255"转换为字符"í"?
解决Java 11中将"\303\255"转换为"í"的问题
核心逻辑
字符串"\303\255"是UTF-8字节的八进制转义表示:
\303对应八进制值303,转十六进制为C3\255对应八进制值255,转十六进制为AD
这两个字节组合起来就是UTF-8编码下字符í的标准字节序列。
实现代码
需要先把八进制转义的字符串解析为对应字节数组,再用UTF-8解码得到目标字符:
import java.nio.charset.StandardCharsets; public class OctalToUtf8Converter { public static void main(String[] args) { String input = "\\303\\255"; // 若输入是带转义的原始字符串,需用双反斜杠 // 解析八进制转义为字节数组 byte[] utf8Bytes = parseOctalEscapeString(input); // UTF-8解码得到目标字符串 String targetChar = new String(utf8Bytes, StandardCharsets.UTF_8); System.out.println(targetChar); // 输出:í } private static byte[] parseOctalEscapeString(String input) { StringBuilder tempBuilder = new StringBuilder(); int index = 0; int len = input.length(); while (index < len) { if (input.charAt(index) == '\\' && index + 3 <= len) { // 提取\后三位八进制数字 String octalSegment = input.substring(index + 1, index + 4); try { // 八进制转字节(处理有符号字节兼容) int octalValue = Integer.parseInt(octalSegment, 8); tempBuilder.append((char) octalValue); index += 4; continue; } catch (NumberFormatException ignored) { // 无效八进制转义,按普通字符处理 } } tempBuilder.append(input.charAt(index)); index++; } // 用ISO-8859-1保证单字节映射,得到原始字节数组 return tempBuilder.toString().getBytes(StandardCharsets.ISO_8859_1); } }
简化场景处理
如果输入字符串是Java编译时已解析的八进制转义(即代码中直接写"\303\255",单个反斜杠),可以直接简化处理:
String input = "\303\255"; String targetChar = new String(input.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); System.out.println(targetChar); // 输出:í
内容的提问来源于stack exchange,提问作者Benan Mozalbet
相关产品推荐
相关产品推荐

