关于powershell:将文件另存为unicode的脚本

script to save file as unicode

你知道我可以任何方式或通过programmatically scrirpt变换一套文本文件保存为ANSI到Unicode的字符编码,编码?

我想做一个我做的,当我打开一个记事本文件选择和保存它在Unicode文件。


这可能对您有用,但请注意,它将抓取当前文件夹中的每个文件:

1
2
Get-ChildItem | Foreach-Object { $c = (Get-Content $_); `
Set-Content -Encoding UTF8 $c -Path ($_.name +"u") }

为简洁起见,使用别名也一样:

1
gci | %{ $c = (gc $_); sc -Encoding UTF8 $c -Path ($_.name +"u") }

StevenMurawski建议使用Out-File。两个Cmdlet之间的区别如下:

  • Out-File将尝试格式化它接收到的输入。
  • Out-File的默认编码是基于Unicode的,而Set-Content使用系统的默认编码。

这里有一个例子,假设文件test.txt在任何一种情况下都不存在:

1
2
3
4
5
6
7
8
PS> [system.string] | Out-File test.txt
PS> Get-Content test.txt

IsPublic IsSerial Name                                     BaseType          
-------- -------- ----                                     --------          
True     True     String                                   System.Object    

# test.txt encoding is Unicode-based with BOM
1
2
3
4
5
6
PS> [system.string] | Set-Content test.txt
PS> Get-Content test.txt

System.String

# test.txt encoding is"ANSI" (Windows character set)

实际上,如果不需要任何特定的Unicode编码,也可以执行以下操作将文本文件转换为Unicode:

1
PS> Get-Content sourceASCII.txt > targetUnicode.txt

Out-File是一个"带有可选参数的重定向操作符"。


最简单的方法是获取内容"path/to/text/file"out file"name/of/file"。

out文件有一个-encoding参数,默认值为unicode。

如果你想编写一批脚本,你可以做一些类似的事情

1
2
3
4
5
$files = get-childitem 'directory/of/text/files'
foreach ($file in $files)
{
  get-content $file | out-file $file.fullname
}


您可以创建一个新的文本文件,并将原始文件中的字节写入新文件,在每个原始字节之前放置一个''(假定原始文本文件是英文的)。


使用System.IO.StreamReader(读取文件内容)类和System.Text.Encoding.Encoding(创建进行编码的编码器对象)基类。


您可以使用ICONV。在Windows上,您可以在Cygwin下使用它。

1
iconv -f from_encoding -t to_encoding file


伪代码…

dim系统,文件,内容,新文件,旧文件

const for reading=1,for writing=2,for appending=3const ansifile=-2,unicodefile=-1

设置system=createObject("scripting.filesystemObject…

set file=system.getfile("text1.txt")。

设置oldfile=file.openastextstream(用于读取,ansifile)

contents=oldfile.readall()。

关闭文件

System.CreateTextFile"text1.txt"

set file=system.getfile("text1.txt")。

设置newfile=file.openastextstream(用于写入,unicodefile)

newfile.write内容

关闭新文件

希望这种方法能奏效。