在 GIT Bash 中运行正则表达式,我的文件中现在有有趣的字符

发布于 2024-08-12 08:51:27 字数 255 浏览 1 评论 0 原文

我在 GIT BASH 中运行了这个正则表达式(我在 Windows 机器上,并且安装了 GIT)。

perl -pe 's/\[(?:xx_)?([^]]+)\]/\[\u$1\]/g'

该文件现在看起来就像是用中文编写的(它是一个 .sql 架构文件)。

示例:

嵛 嬀] IDENTITY(1,1) NOT NULL,

是否存在编码问题?

I ran this regex in GIT BASH (I am on a windows machine, and I have GIT installed).

perl -pe 's/\[(?:xx_)?([^]]+)\]/\[\u$1\]/g'

The file now looks as if it is written in Chinese (it is a .sql schema file).

example:

嵛 嬀] IDENTITY(1,1) NOT NULL,

Is there some encoding issue going on?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

朕就是辣么酷 2024-08-19 08:51:27

这不是与问题 358 类似吗?

Windows 命令行和 GUI 程序默认使用不同的代码页。
对于历史 DOS 兼容性,命令行(“OEM”)代码页为 437,而
GUI(“ANSI”)代码页为 1252。请参阅有趣的阅读内容

控制台使用 OEM 代码页(我的系统上为 437),而 GUI 使用 ANSI 代码页(我的系统上为 1252)。
从控制台启动程序时,cmd.exe通常不会修改
该程序的参数,除非该程序恰好是 .bat.cmd 文件
在这种情况下 cmd.exe 对参数执行代码页转换(请参阅“代码页
转化
”)。
因此 git.exe 已经收到 1252 编码的“Daniël”,即
为什么它看起来很好,它使用记事本查看 .git/config
但是,当读取 user.name 时,不会发生代码页转换,并且 1252 编码中的“Daniël”会打印到控制台,从而导致我的系统上出现“Daniδl”。
显然,使用 MSYS / Git Bash 时情况有所不同。

总而言之,从 cmd.exe 运行 Git 时的解决方案(通过 .cmd 包装器)
似乎是:

1) 将控制台字体从光栅字体更改为 True Type 字体,
2) 通过“chcp”更改控制台代码页以匹配 Windows 代码页(无论什么)
可能是这样)。


简而言之,修复即将到来:您可以尝试一下 beta Git安装程序并查看是否仍然存在编码问题?

Isn't that similar to issue 358?

Windows command line and GUI programs use different codepages by default.
For historical DOS compatibility, the command line ("OEM") codepage is 437, while the
GUI ("ANSI") codepage is 1252. See the interesting reading here.

The console uses the OEM codepage (437 on my system) while the GUI uses the ANSI codepage (1252 on my system).
When launching a program from the console, cmd.exe usually does not modify the
arguments to that program, except if the program happens to be a .bat or .cmd file in
which case cmd.exe performs a codepage conversion on the arguments (see "Codepage
Conversions
").
So git.exe already receives "Daniël" in 1252 encoding, which is
why it looks fine it looking at .git/config using Notepad.
When reading user.name, however, no codepage conversion takes place and "Daniël" in 1252 encoding is printed to the console, resulting in "Daniδl" on my system.
Obviously, the situation is different when using MSYS / Git Bash.

So, to sum up, the solution when running Git from cmd.exe (via the .cmd wrappers)
seems to be to:

1) change the console font from a raster font to a True Type font,
2) change the console codepage via "chcp" to match the Windows codepage (whatever
that may be).


In short, a fix is coming: could you try this beta Git installer and see if you still have the encoding issue?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文