Transmission: [2.92 x64 daemon W8.1] 特殊字符问题

创建于 2016-10-13  ·  23评论  ·  资料来源: transmission/transmission

嘿,

我在提交中看到了一些关于固定符号的内容,但我不确定这是否涵盖了所有特殊字符和大小写,所以就到这里。 否则请随意关闭它:

在传输 2.92 中,作为 Windows 8.1 上的 64 位守护程序运行,我有两个无法使用的种子实例。 该程序无法处理种子名称中的“:”或“è”,并在列表中生成了一个由于恢复错误而无法使用的项目。 它在 Resume 文件夹中留下了一个没有适当扩展名的文件,在使用 Shift+Del 删除有问题的项目后,我还必须手动删除该文件。

事后这些也无法手动修复。 我不得不求助于没有这些字符的种子文件。

core enhancement windows

最有用的评论

我只是想提出这个问题并询问是否有任何进展。 这绝对应该被归类为一个错误,它不仅影响 Windows 用户,它影响所有使用 NTFS 驱动器的用户,正如上面提到的@jescin 。 我们确切地知道是什么导致了这个错误,并且我们有很多修复它的方法,但是 3 年多来什么都没做。

标记@ckerr ,因为他似乎在这个 repo 中做了很多出色的维护,我相信这应该得到照顾。

所有23条评论

Windows 构建完全是 Unicode(至少我希望如此)。 因此,“è”应该没有问题,除非它没有以 UTF-8 编码(很可能就是这种情况)。 在我的测试中,名称中包含俄文和中文字符的种子运行良好。 如果您遇到问题的 torrent 是公开且合法的,请随时在此处附上。 否则,我们会在修复它时修复它。

至于“:”,Windows 本身禁止在文件和目录名称中使用此字符(以及其他字符),因此需要以某种方式进行转换(替换为允许的字符)。 据说 torrent 元数据中存在的名称纯粹是建议性的,但目前没有以安全和向后兼容的方式自动进行这些转换的功能。

TRAC-4160TRAC-4753相关。

刚试了一下。 我可以确认带有法语符号(à、ô、é)的种子可以正常工作。 让我们假设带有撇号的那个编码不同。 不幸的是,我已经没有它了。

抱歉,但我不太明白为什么设置了“增强”标签而不是“错误”? 这不仅是 Windows 特有的问题,FAT/NTFS 卷也可以安装在 Linux 中。

我也遇到过这个问题。 我可以建议编辑磁铁链接的文件名/文件名部分,删除冒号,作为一种解决方法。

mikedld 提到没有安全且向后兼容的方式来为文件系统转换 torrent 标题/文件夹/文件。

我建议为文件系统简单地删除所有禁止字符,即删除没有空白空间,并在元数据中保持原样。 双点也可以用破折号代替,但是当它必须连贯时,为什么还要为此制定特定的规则呢? 由于 torrent 标题/文件夹/文件名都准确地存储在 torrent 元数据中,我在这里看不到双向和单向转换之间的功能差异。 如果规则是统一的、可重复的并且通过传输处理得很好,那么它应该对文件系统进行写入和解析吗?

无论如何,文件和文件夹应该始终具有合理的名称,因为它们源自文件系统。 主要是洪流瓷砖是狂野的,现在是一个问题。

我也有这个问题,并且碰巧在 Linux 中遇到了这个问题(因为我的目标是一个 NTFS 卷)。 我可以通过按照上面的建议手动编辑磁铁链接来解决这个问题。 不方便,但它仍然有效。 我也同意这似乎更好地归类为错误而不是增强。

因此,在我的设置中,我在几台 Windows 机器上都有传输远程 GUI,指向运行传输客户端的 Linux 机器。 正如我之前所说,Linux 机器正在写入 NTFS 卷(这是一个旧设置,不要问我为什么这样做,老实说,我应该将卷重做为 ext 3 或 4,但我离题了.. .)。 在文件名中,冒号字符总是对我来说是个问题。

因此,我写了一个 vbscript 来帮助我解决这个问题(我称之为 ColonCleanser.vbs 哈哈); 它只是在将它们提交给传输之前从磁铁链接的文件名部分中去除冒号。 我通过 1) 将脚本复制到每台 Windows 机器上的 C:\Program Files (x86)\Transmission Remote GUI\ 和 2) 更新每台机器上的注册表以使用所述脚本处理磁力链接来实现这一点。 我从下面的设置中复制了脚本和注册表项。 如果你们中的任何人尝试使用它,我建议查看脚本和注册表项,以确保每个位置中的位置与您的设置相匹配,并根据需要进行编辑。 希望这可以帮助其他人解决其他人的 NTFS 问题。

这是文件 ColonCleanser.vbs 的内容(创建文件并将其复制到 C:\Program Files (x86)\Transmission Remote GUI\ ):

Option Explicit

'define location of Transmission client
Dim sTrnsLoc:       sTrnsLoc = "C:\Program Files (x86)\Transmission Remote GUI\transgui.exe"

'define delimiter to split magnet link into parts
Dim sDelimit:       sDelimit = "&"

'define headers for the sections in which replacements are to be made
Dim aReplHdr:       aReplHdr = Array("dn=")

'define text strings for replacements in specified headers above; even number of items needed; item 1 replaces 0, 3 replaces 2, etc
Dim aReplTxt:       aReplTxt = Array("%3A", "")

'define text strings for global replacements at the end before submitting final text to the copy buffer; even number of items needed
Dim aReplAll:       aReplAll = Array("%", "^%",_
                                     "&", "^&",_
                                     "<", "^<",_
                                     ">", "^>",_
                                     "|", "^|",_
                                     "'", "^'",_
                                     "`", "^`",_
                                     ",", "^,",_
                                     ";", "^;",_
                                     "=", "^=",_
                                     "(", "^(",_
                                     ")", "^)",_
                                     "!", "^!",_
                                     "^", "^^^",_
                                     """", """"""_
                                    )

'grab raw magnet link from memory, and split using provided delimiter
Dim sRawLink:       sRawLink = WScript.Arguments(0)
Dim aRawLink:       aRawLink = Split(sRawLink, sDelimit)

'dimension variables for array looping
Dim i, j, bMatch

'loop through split magnet link array...
'test to make sure each item matches to an entry in aReplHdr, then run through replacements in aReplTxt
For i = 0 to UBound(aRawLink)

    bMatch = False
    For j = 0 to UBound(aReplHdr)
        If Left(aRawLink(i), Len(aReplHdr(j))) = aReplHdr(j) Then
            bMatch = True
            Exit For
            End If
        Next 'j

    If bMatch = True Then
        For j = 0 to Ubound(aReplTxt) Step 2
            aRawLink(i) = Replace(aRawLink(i), aReplTxt(j), aReplTxt(j + 1))
            Next 'j
        End If

    Next 'i

'reconstitute link from array
Dim sRepLink:       sRepLink = Join(aRawLink, sDelimit)

'loop through global replacements, necessary to pass cleansed string in command line echo
For i = 0 to UBound(aReplAll) Step 2
    sRepLink = Replace(sRepLink, aReplAll(i), aReplAll(i + 1))
    Next 'i

'define shell object
Dim objShell:   Set objShell = WScript.CreateObject("WScript.Shell")

'add link to copy buffer
objShell.Run "cmd.exe /c echo " & sRepLink & "| clip", 0, TRUE

'open Transmission client
objShell.Run """" & sTrnsLoc & """", 0, FALSE

'unset objects to prevent memory leaks
Set objShell = Nothing

如果您想重新创建它,这是我的注册表项中的内容。 创建任何带有 .reg 扩展名的文件并将以下代码复制到其中,然后运行它以更新您的注册表(我建议在运行之前备份您现有的 HKEY_CLASSES_ROOT\Magnet 密钥):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Magnet]
@="Magnet URI"
"Content Type"="application/x-magnet"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\Magnet\DefaultIcon]
@="\"C:\\Program Files (x86)\\Transmission Remote GUI\\transgui.exe\",0"

[HKEY_CLASSES_ROOT\Magnet\shell]
@="open"

[HKEY_CLASSES_ROOT\Magnet\shell\open]

[HKEY_CLASSES_ROOT\Magnet\shell\open\command]
@="\"wscript.exe\" \"C:\\Program Files (x86)\\Transmission Remote GUI\\ColonCleanser.vbs\" \"%1\""

@Tharn

没有安全且向后兼容的方式可以为文件系统转换 torrent 标题/文件夹/文件。

怎么“不”? 您只需要在写入文件/目录时替换禁用字符,而无需更改 torrent 文件的数据。
在 Windows 中,您不能在文件/目录名称中创建带有冒号的 torrent,因为这不能在操作系统本身中完成。 因此,我们只讨论单向转换。
现在,即使您更改名称中没有禁止字符的目标目录,临时文件仍会尝试创建名称中带有冒号的临时文件,这会导致下载每隔几分钟就会停止。 (见#301)

我同意你的看法,可能在那里 ping 错了人

那么,我们是否确定在 Windows 中,如果您的 Transmisison 开始下载带有冒号的磁链接,它会坐下来卡住吗? 我正在为那些熟悉的人使用 Sonarr,也许我可以设置删除带有冒号的文件,但不确定它是如何工作的,或者它会从我的下载能力中消除什么。

JR

双冒号字符仍然使传输抛出并崩溃。 来吧,伙计们,请制定一个禁止角色转换的计划。 这是一个大问题。 此故障排除了无数种子文件的工作。

我只是想提出这个问题并询问是否有任何进展。 这绝对应该被归类为一个错误,它不仅影响 Windows 用户,它影响所有使用 NTFS 驱动器的用户,正如上面提到的@jescin 。 我们确切地知道是什么导致了这个错误,并且我们有很多修复它的方法,但是 3 年多来什么都没做。

标记@ckerr ,因为他似乎在这个 repo 中做了很多出色的维护,我相信这应该得到照顾。

@mikedld你似乎在这个存储库中相当活跃,这是一个已经存在三年多的严重问题,作为这个每天使用这个软件的社区的成员,我真的厌倦了缺乏关注像这样的问题。 你能做些什么来推动解决这个问题吗?

只是因为文件名中的 : 而放弃了另一个种子

这是软件的一个严重故障,应该很容易修复(例如用 | 替换字符),这是一个很长一段时间内的问题,而且这么明显的错误会被忽略这么久似乎很奇怪

请解决这个问题......任何人? :)

可能的解决方法:如果您发现文件名中带有 : 的 torrent,请使用磁力链接在传输中打开它,然后手动编辑 URL 以删除%3A (这是冒号符号的 URL 编码)。 一旦 : 字符从磁铁 URI 中删除,种子应该能够像正常和功能一样添加自己。

这实际上意味着关闭此问题所需的唯一代码是一个简单的 URI 字符串检查器,它可以从链接中删除无效字符。 希望能够解决这么简单的问题,但话说回来,这个问题已经开放了 3 年多了......

很好的解决方法。
如果没有像这样的“hacky”解决方案,问题就很简单:
只需让传输从文件名和目录名中去除无效字符。 将它们保留在种子名称中。 完毕。

这是使 Windows 上的传输无法坚如磐石的一大问题。 请考虑对 3.0 进行修复。

我认为这是 #294 的一部分(参见 99033b067da01c646a3e12a13f8bbcd43a9dd056)。 随意测试当前的每晚并报告回来。

当前的每晚在 W10 上为我解决了这个问题 - 谢谢 👍 👍

我会在即将发布的稳定版本中确认后立即关闭它,如果每个人都可以的话。

我会在即将发布的稳定版本中确认后立即关闭它,如果每个人都可以的话。

此问题设置为里程碑 3.00。 您在等待即将发布的稳定版本确认并关闭此问题,而 v3.00 正在等待此问题先关闭😰

是的,大声笑。 我尝试使用transmission-3.00+-r20119f006c-x64,据我所知,标题中带有“:”的种子现在可以正常加载。 它们往往具有不同的内部名称,所以我还没有看到“:”一直持续到需要编写文件夹名称的情况。 看看那时会发生什么,或者是否有可能会很有趣。

如果你有一个很好的例子 torrent,请告诉我!

暂时关闭。 假设固定。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

boingo-00 picture boingo-00  ·  3评论

crumpetcrusher picture crumpetcrusher  ·  5评论

crozone picture crozone  ·  6评论

Zeebrah picture Zeebrah  ·  6评论

JustMyGithub picture JustMyGithub  ·  5评论