找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 2373|回复: 7

[文本处理] 【已解决】使用批处理转换Unicode码

[复制链接]
发表于 2025-9-22 21:03:08 | 显示全部楼层 |阅读模式
本帖最后由 dimo 于 2025-9-24 13:36 编辑

发这个帖之前看了很多论坛之前的帖子,有关文件编码的,但是没找到跟这个问题类似的

这是来自curl命令的回显的一部分,而且是Unicode码跟英文混在一起写的
  1. \u606d\u559c dimo\uff01\u4f60\u5df2\u6210\u529f\u5b8c\u6210\u6240\u6709\u4efb\u52a1\uff01
复制代码
求问能否把Unicode码转成中文字符显示出来,并且不影响里面的英文
最好是用批处理或者powershell,实在不行的话就推荐一个第三方吧……

或者还有一个办法是,能不能让curl的回显不用这种方式来显示。这里的curl用的是POST方法,返回来的是个json格式的,我上面是摘取的一部分。
发表于 2025-9-22 21:24:23 | 显示全部楼层
回复 1# dimo
  1. function Convert-UnicodeEscape {
  2.     param(
  3.         [Parameter(Mandatory=$true)]
  4.         [string]$InputString
  5.     )
  6.     $pattern = '\\u([0-9a-fA-F]{4})'
  7.     $result = [regex]::Replace($InputString, $pattern, {
  8.         param($match)
  9.         [char]::ConvertFromUtf32([Convert]::ToInt32($match.Groups[1].Value, 16))
  10.     })
  11.     return $result
  12. }
  13. $UnicodeString = "\u606d\u559c dimo\uff01\u4f60\u5df2\u6210\u529f\u5b8c\u6210\u6240\u6709\u4efb\u52a1\uff01"
  14. $ChineseString = Convert-UnicodeEscape -InputString $UnicodeString
  15. Write-Host $ChineseString
复制代码
发表于 2025-9-22 22:27:03 | 显示全部楼层
本帖最后由 77七 于 2025-9-24 15:37 编辑

可以试试uesc
就是不支持从管道接收输入,需要变通一下
---------------
更正:部分支持,见6、7楼。
发表于 2025-9-22 23:28:23 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-9-22 23:36 编辑

回复 1# dimo

用批处调用 powershell 功能的几个示例如下(均存为批处脚本运行)...

  1. @echo off &set "s=\u606d\u559c dimo\uff01\u4f60\u5df2\u6210\u529f\u5b8c\u6210\u6240\u6709\u4efb\u52a1\uff01"
  2. powershell -c "[regex]::Unescape('%s%')"
  3. pause&exit/b
复制代码
假设 curl ... 返回值(例如上例中的变量 s 值,可以是多行)已存为 1.txt,可用以下版本

  1. @echo off &powershell -c "gc '1.txt' | %% { [regex]::Unescape($_) }"
  2. pause&exit/b
复制代码
 楼主| 发表于 2025-9-24 13:35:11 | 显示全部楼层
回复 2# ShowCode

可以的,不过需要传参。

我不太懂powershell,大概看了一下,好像做了个判断,哪个字符是Unicode哪个是英文?不过根据四楼的方法,全输入进去倒是直接出了,没影响英文。还比较简洁。

回复 4# aloha20200628
 楼主| 发表于 2025-9-24 13:36:05 | 显示全部楼层
回复 3# 77七


    我看了一下他发表的帖子页面,说是支持管道符的,而且直接后面跟参数也是可以。试了一下,好用的

    http://www.bathome.net/viewthread.php?tid=24462
发表于 2025-9-24 15:28:09 | 显示全部楼层
回复 6# dimo


  试了下,超过4KB多的数据就不能从管道接收了;uesc < 文本没有这个限制。
发表于 2025-9-24 16:13:45 | 显示全部楼层
将下面的接到命令后面

  1. |powershell -c "$input|foreach{[regex]::replace($_,'\\[uU]([0-9A-fa-f]{4})',{[char][int]('0x'+$($args[0].groups[1]))})}"
复制代码
例如

  1. echo \u606d\u559c dimo\uff01\u4f60\u5df2\u6210\u529f\u5b8c\u6210\u6240\u6709\u4efb\u52a1\uff01|powershell -c "$input|foreach{[regex]::replace($_,'\\[uU]([0-9A-fa-f]{4})',{[char][int]('0x'+$($args[0].groups[1]))})}"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:06 , Processed in 0.019025 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表