标题: [问题求助] 求指导PowerShell脚本unicode编码转中文中的代码含义 [打印本页]
作者: 5i365 时间: 2022-3-29 17:28 标题: 求指导PowerShell脚本unicode编码转中文中的代码含义
下面的代码,可以把一段字符串中的unicode字符转成中文, 但是看不懂中间那段代码什么含义, 请求大佬指点迷津,添加一下注释, 提前感谢!
具体疑问:
1. 没有Function关键字, 却有param
2. 在一语句前为什么加两个类型 [char][int]
3. $v.Value.replace 这个怎么对象的属性的方法连起来了
$Uni_s = '嗨!\u6211\u662f\u4e2d\u56fd\u4eba'
$match = {
param ($v)
[char][int]($v.Value.replace('\u', '0x'))
}
[regex]::Replace($Uni_s, '\\u[0-9-a-f]{4}', $match)
作者: 523066680 时间: 2022-3-29 18:38
介么复杂的吗- use utf8;
- use Encode;
- my $str='嗨!\u6211\u662f\u4e2d\u56fd\u4eba';
- $str=~s/\\u(.{4})/chr(hex($1))/eg;
- print encode('gbk', $str);
复制代码
作者: 5i365 时间: 2022-3-29 18:52
回复 2# 523066680
感谢大侠指导, 看不出来您用的什么脚本语言
感觉上面的PS脚本可能还可以再精简些
作者: 523066680 时间: 2022-3-29 19:00
换一种方式,转 \x{} 再 eval- use utf8;
- use Encode;
- my $str='嗨!\u6211\u662f\u4e2d\u56fd\u4eba';
- $str=~s/\\u(.{4})/\\x\{$1\}/g;
- print encode('gbk', eval qq("$str"));
复制代码
破语言,不值一提。
作者: idwma 时间: 2022-3-29 20:19
- [regex]::Replace($Uni_s, '\\u.{4}', {$args[0];"`n"})
- [regex]::Replace($Uni_s, '\\u.{4}', {[char][int]($args[0] -replace '\\u','0x')})
复制代码
作者: 5i365 时间: 2022-3-30 06:43
回复 5# idwma
大侠这里用 $args[0] 用的妙, 但还是似懂非懂, 先Mark了, 以后慢慢消化 另外感觉用这个 '\\u[0-9-a-f]{4}' 更严谨一些
- $Uni_s = '嗨!\u6211\u662f\u4e2d\u56fd\u4eba'
- [regex]::Replace($Uni_s, '\\u[0-9-a-f]{4}', { [char][int]($args[0] -replace '\\u', '0x') })
复制代码
作者: 5i365 时间: 2022-3-30 06:49
本帖最后由 5i365 于 2022-3-30 06:50 编辑
回复 5# idwma
想请教大侠, 代码中应该是使用了C#的替换函数 [regex]::Replace
不能全程使用PS的替换 -Replace 来搞定吗?
还是说这里用 [regex]::Replace 更恰到好处?
作者: idwma 时间: 2022-3-30 15:29
回复 7# 5i365
不用类只用-replace来实现好想法,但是不会呀
期待分享
作者: for_flr 时间: 2022-3-30 17:16
学习了,powershell果然很power!
这个语句运行过程很类似下面这个- [regex]::matches($uni_s,'\\u(.{4})')|%{[char][int]($_.value.replace('\u','0x'))}
复制代码
param关键字是语句块中定义参数,语句块由大括号引起来,函数其实就是指定了名字的语句块。
[char][int]等多个类型名一起用是常见技巧。
作者: 5i365 时间: 2022-3-30 18:54
回复 9# for_flr
感谢分享, 用管道后, 好理解多了! 但我执行后, 是竖着输出的, 嗨! 没了
我
是
中
国
人
作者: 5i365 时间: 2022-3-30 18:58
回复 9# for_flr
[char][int](0x) 大概的意思能明白, 就是把括号内的16进制转成整数,再转成char字符, 但是为啥转成char字符后, 汉字就出来了呢?
作者: for_flr 时间: 2022-3-30 21:18
回复 10# 5i365
我意思是一楼的语句运行过程和我举例的代码很相似,将正则匹配到的数据调用replace()方法处理之后,再进行替换。
[char]可以返回ascⅡ编码对应的字符,题目中16进制[int]转换后的数字就是那几个汉字的ascⅡ编码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |