从 Docker-Container 保留编码

Keep Encoding from Docker-Container

提问人:mk-94 提问时间:10/13/2023 最后编辑:danblackmk-94 更新时间:10/16/2023 访问量:78

问:

我在 Docker for Windows 上使用 MariaDB 和 Powershell。 当我想使用 docker exec 创建 mysqldump 并将文件从容器重定向到 hostsystem 时,编码从 UTF8 更改为 UTF16。

这是我创建mysqldump的命令:

docker exec -i containername mysqldump -uusername -ppassword database > .\sql-filename.sql

由于这个“>”,文件将以 UTF16 编码。

Docker PowerShell MariaDB UTF-16

评论

0赞 Pino 10/13/2023
这回答了你的问题吗?将 PowerShell 的默认输出编码更改为 UTF-8
0赞 mk-94 10/13/2023
感谢您的链接和帮助。我试过了这个,在没有 docker 的情况下,在本机安装的 MariaDB 实例上它工作正常。当我使用 Docker 并显式连接到容器以在容器中创建 sql-dump 时,它也可以工作,如下所示: 1. docker exec -it containername /bin/bash 2.mysqldump -u username -p 数据库> ./sql-filename.sql 3.docker cp containername:/sql-filename.sql C:\path\on\hostsystem 容器内的编码为 utf8,数据库架构中的编码为 utf8mb4。
0赞 mk-94 10/13/2023
我还有一个发现。当我使用命令docker exec -it containername mysqldump -uusername -ppassword database时,我得到了powerhsell输出上的内容,一切都很好。例如,德国的变音符号是正确的。
0赞 mk-94 10/13/2023
但是当我使用 Set-Content 并且文本直接写在控制台上时,德语变音符号设置正确。像这个命令一样:“带有德语变音符号的文本:ÄäÖöÜü” |set-content -encoding UTF8 -path .\umlauts.txt

答:

0赞 mk-94 10/16/2023 #1

问题在于 Powershell 5.1 的使用。 通过 Microsoft Store 安装 Windows 终端和 Powershell (7+),可以更改编码。 重要的是使用 pwsh.exe 而不是 powershell.exe。 安装后,必须完成以下设置。所以皮诺的链接很棒。

#if you want to revert the default-encoding you should save the actual settings
$defaultEncoding = [Console]::OutputEncoding
# Set the encoding to UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# docker exec command, also | Set-Content sql-file.sql is possible
docker exec -i containername mysqldump -uusername -ppassword database > .\sql-filename.sql
# revert default encoding
[Console]::OutputEncoding = $defaultEncoding