You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:42:46