如何在 powershell 中以正确的编码处理文件?
How to process a file in correct encoding in powershell?
我有一个 MySQL
的 SQL
文件,它在 UTF8
中编码,名为 data.sql
(由 mysqldump
命令生成)。
如果我 运行 在 cmd.exe
控制台中执行以下操作,文件将得到正确处理。
mysql --defaults-file=mysql.update2.ini --batch --raw --database=test1 --default-character-set=utf8 < "data.sql"
如果我 运行 在 powershell
控制台中输入以下数据,数据将以错误的编码插入(导致 ??
而不是带有变音符号的字符)。
Get-Content "data.sql" | & 'mysql' --defaults-file=mysql.update2.ini --batch --raw --database=test1 --default-character-set=utf8
如果我从 Powershell ISE 运行 相同,脚本将以正确的编码导入。
如果 运行 作为 powershell
脚本(使用powershell
控制台)?
我尝试将 Get-Content
的 -Encoding
参数设置为 UTF8
、ASCII
、Unicode
或 OEM
,但两者都没有导致正确导入数据。
备注
cmd.exe
控制台 returns 852
中的 chcp
,powershell
控制台以及 Powershell ISE 中的 chcp
。
SQL
脚本包含描述预期编码的行,例如 /*!40101 SET NAMES utf8 */;
- 在这两种情况下,
mysql.update2.ini
文件仅包含 host
、port
、user
和 password
设置。
iso-8859-1
中的 Powershell ISE 输出和 us-ascii
中的控制台
至少在我的电脑上,你可以通过检查变量 $OutputEncoding
自己检查
您可以更改此变量
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
然后它应该在 Powershell ISE 和 Powershell 控制台中工作
我有一个 MySQL
的 SQL
文件,它在 UTF8
中编码,名为 data.sql
(由 mysqldump
命令生成)。
如果我 运行 在
cmd.exe
控制台中执行以下操作,文件将得到正确处理。mysql --defaults-file=mysql.update2.ini --batch --raw --database=test1 --default-character-set=utf8 < "data.sql"
如果我 运行 在
powershell
控制台中输入以下数据,数据将以错误的编码插入(导致??
而不是带有变音符号的字符)。Get-Content "data.sql" | & 'mysql' --defaults-file=mysql.update2.ini --batch --raw --database=test1 --default-character-set=utf8
如果我从 Powershell ISE 运行 相同,脚本将以正确的编码导入。
如果 运行 作为 powershell
脚本(使用powershell
控制台)?
我尝试将 Get-Content
的 -Encoding
参数设置为 UTF8
、ASCII
、Unicode
或 OEM
,但两者都没有导致正确导入数据。
备注
cmd.exe
控制台 returns852
中的chcp
,powershell
控制台以及 Powershell ISE 中的chcp
。SQL
脚本包含描述预期编码的行,例如/*!40101 SET NAMES utf8 */;
- 在这两种情况下,
mysql.update2.ini
文件仅包含host
、port
、user
和password
设置。
iso-8859-1
中的 Powershell ISE 输出和 us-ascii
中的控制台
至少在我的电脑上,你可以通过检查变量 $OutputEncoding
您可以更改此变量
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
然后它应该在 Powershell ISE 和 Powershell 控制台中工作