如何在PowerShell中以字面形式打印含特殊字符的字符串?
打印字符串中所有特殊字符的实现方案
核心思路是将字符串中不可见的控制字符(如\n、\t、\r)转换为可见的字面转义形式,既保留原字符串的内容结构,又能直观看到所有特殊字符。以下是几种主流编程语言的实现方式:
Python 实现
快速方案(利用内置函数)
直接使用repr()函数,它会自动将所有特殊字符转成字面转义形式,只需去掉首尾的引号即可:
with open("file.txt", "r") as f: content = f.read() # 去掉repr自动添加的首尾单引号 print(repr(content)[1:-1])
自定义精准控制方案
如果需要自定义转义规则(比如将罕见控制字符转为\xXX格式),可以用正则或手动映射:
import re def escape_special_chars(s): # 定义常见特殊字符的转义映射 escape_map = { '\n': r'\n', '\t': r'\t', '\r': r'\r', '\b': r'\b', '\f': r'\f', '\\': r'\\' } # 匹配所有非可打印ASCII字符,替换为对应转义形式 return re.sub( r'([^\x20-\x7E])', lambda match: escape_map.get(match.group(0), f'\\x{ord(match.group(0)):02x}'), s ) with open("file.txt", "r") as f: content = f.read() print(escape_special_chars(content))
Java 实现
依赖第三方工具类(简化开发)
使用Apache Commons Lang库的StringEscapeUtils.escapeJava()方法,一键完成转义:
import org.apache.commons.lang3.StringEscapeUtils; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class SpecialCharPrinter { public static void main(String[] args) throws IOException { String content = Files.readString(Paths.get("file.txt")); System.out.println(StringEscapeUtils.escapeJava(content)); } }
无依赖手动实现
如果不想引入第三方库,可手动遍历字符完成转义:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class SpecialCharPrinter { public static String escapeSpecialChars(String s) { StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { switch (c) { case '\n': sb.append("\\n"); break; case '\t': sb.append("\\t"); break; case '\r': sb.append("\\r"); break; case '\b': sb.append("\\b"); break; case '\f': sb.append("\\f"); break; case '\\': sb.append("\\\\"); break; default: // 可打印字符直接保留,不可打印字符转为\uXXXX格式 if (c < 32 || c > 126) { sb.append(String.format("\\u%04x", (int) c)); } else { sb.append(c); } } } return sb.toString(); } public static void main(String[] args) throws IOException { String content = Files.readString(Paths.get("file.txt")); System.out.println(escapeSpecialChars(content)); } }
C++ 实现
遍历字符串中的每个字符,判断是否为可打印字符,不可打印字符转为对应转义序列:
#include <iostream> #include <fstream> #include <string> #include <cctype> std::string escapeSpecialChars(const std::string& s) { std::string result; for (char c : s) { switch (c) { case '\n': result += "\\n"; break; case '\t': result += "\\t"; break; case '\r': result += "\\r"; break; case '\b': result += "\\b"; break; case '\f': result += "\\f"; break; case '\\': result += "\\\\"; break; default: if (std::isprint(static_cast<unsigned char>(c))) { result += c; } else { // 转为\xXX格式的十六进制转义 char buf[5]; snprintf(buf, sizeof(buf), "\\x%02x", static_cast<unsigned char>(c)); result += buf; } } } return result; } int main() { std::ifstream file("file.txt"); std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); std::cout << escapeSpecialChars(content) << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者dspjm
相关产品推荐
相关产品推荐

