免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: yourkeychen

awk传递unicode变量的问题 [复制链接]

论坛徽章:
0
发表于 2018-10-11 03:15 |显示全部楼层
事隔十年,我再次提起来。

论坛徽章:
0
发表于 2018-10-11 12:39 |显示全部楼层

powershell帮你解决10年不治的问题,这总不算是  过度宣传powershell 吧?

powershell 不用 LANG,肯定能解决这个问题。

首先得知道这是啥问题。
文件名编码,要正确解析,如何正确呢?
文本有bom头,若你的文本没有,就得靠猜。
所以,这个也得靠猜。
也就是说,读入文件名raw码,按某种方案解析,让用户判断是否正确,
用户输入y后,跳转到传递值给awk这样。
若户输入n后,跳转到下一种解析。

那么我贴下,解析代码。不外乎编码和解码。


# powershell 和 。net 字符串(非文件)编码转换例子。
$mystring = "张三"

$mygb2312 = [System.Text.Encoding]::GetEncoding(936)
$myunicode = [System.Text.Encoding]::GetEncoding("unicode")
<#
结果是对的,经查表,【张】字的gb2312码为d5c5,即213,197,
powershell 传教士 原创文章 2015-06-22,允许转载,但必须保留名字和出处,否则追究法律责任
.net 编码转换原理
任何编码转换,都是根据码表。
我假设:【三】的gb2312编码为【00100】,【三】utf8编码为【00200】,【三】的unicode即utf16编码为【00300】。
那么,一句话的编码转换,首先要把这句话,切割成单个汉字组成的数组,然后分别转换。最后再组合起来。
比如把【三三】从gb2312转换成unicode,编码就变成了【00300,00300】
这就是 .net 编码转换原理。
当然比如这个码表里有的字,那个码表中没有,这时候就会转换出错。
#>
$unicode单个汉字数组 = $myunicode.getbytes($mystring)
$gb2312单个汉字数组 = [System.Text.Encoding]::Convert($myunicode,$mygb2312,$unicode单个汉字数组)
$gb2312字符串 = $mygb2312.GetString($gb2312单个汉字数组)

$unicode单个汉字数组
write-host $gb2312字符串  
$gb2312单个汉字数组

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP