From 6fa0a3a7878f26aa8488b60375b1684b7473582d Mon Sep 17 00:00:00 2001 From: fengxxc Date: Thu, 27 Feb 2025 11:29:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20linux=E4=B8=8B=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E6=96=9C=E6=9D=A0=E5=AF=BC=E8=87=B4=E8=A2=AB?= =?UTF-8?q?=E5=88=86=E6=88=90=E4=B8=A4=E7=BA=A7=E7=9B=AE=E5=BD=95=E7=9A=84?= =?UTF-8?q?bug(=E4=BD=BF=E7=94=A8=E2=88=95=E6=9B=BF=E4=BB=A3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- README.md | 8 ++++++-- format/format.go | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2a02690..095ccf9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ BUILD_ENV := CGO_ENABLED=0 APP=wechatmp2markdown -VERSION=v1.1.9 +VERSION=v1.1.10 # linux or mac 环境编译 # make [cmd] diff --git a/README.md b/README.md index 06f6de6..d512c20 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,11 @@ markdown和图片文件将保存在 `D:\wechatmp_bak\gitcode操你妈\` 下 > "*" -> "⁎" > ``` -> 在linux环境下,使用CLI模式,需要为程序赋予可执行与写权限,例如:` chmod +xw wechatmp2markdown-v1.1.9_linux_amd64` +> 在linux环境下,使用CLI模式,需要为程序赋予可执行与写权限,例如:` chmod +xw wechatmp2markdown-v1.1.10_linux_amd64`; +> 以及,文件或路径名不能包含以下任何字符:/(正斜杠),当标题包含以上字符时,本程序将用相似的Unicode字符进行替换,具体替换规则为: +> ``` +> "/" -> "∕" +> ``` ### web server 模式 通过web服务使用 @@ -105,7 +109,7 @@ markdown和图片文件将保存在 `D:\wechatmp_bak\gitcode操你妈\` 下 浏览器访问:`localhost:8964?url=https://mp.weixin.qq.com/s/a=1&b=2&image=save`, 将返回一个zip文件 -> 在linux环境下,使用web server模式,需要为程序赋予可执行权限,例如:` chmod +x wechatmp2markdown-v1.1.9_linux_amd64` +> 在linux环境下,使用web server模式,需要为程序赋予可执行权限,例如:` chmod +x wechatmp2markdown-v1.1.10_linux_amd64` ## 开发 go 1.20 diff --git a/format/format.go b/format/format.go index 1e48882..1dec256 100644 --- a/format/format.go +++ b/format/format.go @@ -57,12 +57,26 @@ func legalizationFilenameForWindows(name string) string { return name } +// linux下, 文件名包含非法字符时, 用相似的Unicode字符进行替换 +func legalizationFilenameForLinux(name string) string { + // Linux文件名不能包含这些字符 + invalidChars := regexp.MustCompile(`[\/]`) + + // 如果包含非法字符,则替换 + if invalidChars.MatchString(name) { + name = strings.ReplaceAll(name, "/", "∕") + } + + return name +} + // FormatAndSave fomat article and save to local file func FormatAndSave(article parse.Article, filePath string) error { // basrPath := filepath.Join(filePath, ) var basePath string var fileName string var isWin bool = runtime.GOOS == "windows" + var isLinux bool = runtime.GOOS == "linux" var separator string if isWin { separator = "\\" @@ -84,6 +98,8 @@ func FormatAndSave(article parse.Article, filePath string) error { title := strings.TrimSpace(article.Title.Val.(string)) if isWin { title = legalizationFilenameForWindows(title) + } else if isLinux { + title = legalizationFilenameForLinux(title) } // title := "thisistitle" basePath = filepath.Join(filePath, title)