部署在openwrt环境中,无法读取/app/music里面的文件列表,文件名非utf8编码问题
通过连接容器的命令行,可以看到music目录下面的mp3文件,但是网页端一直无法刷出播放列表。。 下面是xiaomusic.log.txt中的错误信息。 [2025-02-18 19:26:34] [0.3.71] [INFO] analytics.py:105: umami Status: 400 [2025-02-18 19:26:35] [0.3.71] [INFO] analytics.py:105: umami Status: 400 [19:29:22] [0.3.71] [INFO] 192.168.1.9:44220 - "GET / HTTP/1.1" 401 [19:33:07] [0.3.71] [INFO] 192.168.1.9:45384 - "GET /getsetting HTTP/1.1" 200 [19:33:09] [0.3.71] [INFO] 192.168.1.9:54124 - "GET /static/sw.js HTTP/1.1" 304 [19:33:10] [0.3.71] [INFO] 192.168.1.9:54140 - "GET /musiclist HTTP/1.1" 500 [19:33:10] [0.3.71] [ERROR] Exception in ASGI application Traceback (most recent call last): File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi result = await app( # type: ignore[func-returns-value] File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call return await self.app(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in call await super().call(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 365, in _sentry_patched_asgi_app return await middleware(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/asgi.py", line 146, in _run_asgi3 return await self._run_app(scope, receive, send, asgi_version=3) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/asgi.py", line 241, in _run_app raise exc from None File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/asgi.py", line 234, in _run_app return await self.app( File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 113, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 187, in call raise exc File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 165, in call await self.app(scope, receive, _send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/gzip.py", line 20, in call await responder(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/gzip.py", line 39, in call await self.app(scope, receive, self.send_with_gzip) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 85, in call await self.app(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 257, in _sentry_exceptionmiddleware_call await old_call(self, scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 62, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 715, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 735, in app await route.handle(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 288, in handle await self.app(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 76, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 73, in app response = await f(request) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/fastapi.py", line 137, in _sentry_app return await old_app(*args, **kwargs) File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 338, in app response = actual_response_class(content, **response_args) File "/app/.venv/lib/python3.10/site-packages/starlette/responses.py", line 180, in init super().init(content, status_code, headers, media_type, background) File "/app/.venv/lib/python3.10/site-packages/starlette/responses.py", line 43, in init self.body = self.render(content) File "/app/.venv/lib/python3.10/site-packages/starlette/responses.py", line 189, in render ).encode("utf-8") UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd6' in position 25: surrogates not allowed [19:45:09] [0.3.71] [INFO] 192.168.1.9:36424 - "GET /static/manifest.json HTTP/1.1" 401 [19:45:10] [0.3.71] [INFO] 192.168.1.9:36434 - "GET /static/sw.js HTTP/1.1" 304 [19:45:11] [0.3.71] [INFO] 192.168.1.9:36438 - "GET /getsetting HTTP/1.1" 200 [19:45:13] [0.3.71] [INFO] 192.168.1.9:36454 - "GET /static/sw.js HTTP/1.1" 304 [19:45:13] [0.3.71] [INFO] 192.168.1.9:36458 - "GET /musiclist HTTP/1.1" 500 [19:45:13] [0.3.71] [ERROR] Exception in ASGI application Traceback (most recent call last): File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi result = await app( # type: ignore[func-returns-value] File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call return await self.app(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 1054, in call await super().call(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 365, in _sentry_patched_asgi_app return await middleware(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/asgi.py", line 146, in _run_asgi3 return await self._run_app(scope, receive, send, asgi_version=3) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/asgi.py", line 241, in _run_app raise exc from None File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/asgi.py", line 234, in _run_app return await self.app( File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 113, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 187, in call raise exc File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 165, in call await self.app(scope, receive, _send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/gzip.py", line 20, in call await responder(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/gzip.py", line 39, in call await self.app(scope, receive, self.send_with_gzip) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/cors.py", line 85, in call await self.app(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 257, in _sentry_exceptionmiddleware_call await old_call(self, scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 62, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 715, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 735, in app await route.handle(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 288, in handle await self.app(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 76, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/app/.venv/lib/python3.10/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 73, in app response = await f(request) File "/app/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/fastapi.py", line 137, in _sentry_app return await old_app(*args, **kwargs) File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 338, in app response = actual_response_class(content, **response_args) File "/app/.venv/lib/python3.10/site-packages/starlette/responses.py", line 180, in init super().init(content, status_code, headers, media_type, background) File "/app/.venv/lib/python3.10/site-packages/starlette/responses.py", line 43, in init self.body = self.render(content) File "/app/.venv/lib/python3.10/site-packages/starlette/responses.py", line 189, in render ).encode("utf-8") UnicodeEncodeError: 'utf-8' codec can't encode character '\udcd6' in position 25: surrogates not allowed
有点奇怪,日志跟问题没啥关系,有全部日志吗?
明天我重置后,重新读取一个完整的,另外浏览器中的缓存怎么删除,在xmusicplayer里面,看到的是以前的在群晖nas中建的docker的文件列表内容,我用的是谷歌浏览器,清除过浏览器内容,还是有缓存的内容,明天重置后,我再用火狐浏览器先试试
---原始邮件--- 发件人: @.> 发送时间: 2025年2月18日(周二) 晚上9:26 收件人: @.>; 抄送: @.@.>; 主题: Re: [hanxi/xiaomusic] 部署在openwrt环境中,无法读取/app/music里面的文件列表 (Issue #396)
有点奇怪,日志跟问题没啥关系,有全部日志吗?
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***> hanxi left a comment (hanxi/xiaomusic#396)
有点奇怪,日志跟问题没啥关系,有全部日志吗?
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
xplayery右上角有个刷新按钮
基本上可以定位是什么导致的了,music目录里面有个文件夹,都是中文歌曲名,移除掉这个文件夹,只放英文歌曲名,列表可以刷新出来,但拷贝回去,列表就刷新不出来了。 同样的歌曲名,在群晖Nas上创建的docker容器,就没有这个问题,xiaomusic使用的是同一0.3.71版本测试的。
中文歌曲名在xftp连接openwrt中显示如下:
连接docker的xiaomusic容器,显示如下,
ls
''$'\260\242\313\301''-'$'\316\322\324\332\310\313\303\361\271''㳡'$'\263\324''ը'$'\274\246''.mp3' 'ţ'$'\304\314''@'$'\277\247\267\310''-'$'\324''ټ'$'\373\243\254\327\362\314\354''.mp3' ''$'\262''̽'$'\241\321\305'' - '$'\272\354''ɫ'$'\270''߸'$'\372''Ь.mp3' 'ţ'$'\304\314''@'$'\277\247\267\310''-'$'\324\347\311''Ϻ'$'\303''.mp3' ''$'\264\367\305\345\304\335''-'$'\324\365\321\371''.mp3' 'ţ'$'\304''̿'$'\247\267\310'' - '$'\303\367\314''죬'$'\304\343\272\303''.mp3' ''$'\267\266\317\376\335\346''-ѩ'$'\310\313''.mp3' 'ţ'$'\304''̿'$'\247\267\310'' - ȥѰ'$'\325\322''.mp3' ''$'\267\266\317\376\335\346''-'$'\321\333\300\341''.mp3' ''$'\307\372\315\361\346\303''-'$'\316''ҵĸ'$'\350\311\371\300\357''.mp3' ''$'\273\306\301\344''-õ'$'\271\345''õ'$'\271\345\316''Ұ'$'\256\304\343''.mp3' ''$'\315\365\267\306''-'$'\316\322''Ը'$'\322\342''.mp3' ''$'\300\356\264\372''ĭ-ĩ'$'\310''ղ'$'\273\271''µ'$'\245''.mp3' ''$'\320\355''Ρ-'$'\271\312\317\347''.mp3' ''$'\300\356\327\332''ʢ-ɽ'$'\307\360''.mp3' ''$'\320\355''Ρ-'$'\276\305\324\302''.mp3' 'Ī'$'\316\304''ε-'$'\272\366''Ȼ֮'$'\274\344''.mp3' ''$'\320\355''Ρ-'$'\316''ҵ'$'\304\307\357\314\354''.mp3' 'ţ'$'\304\314''@'$'\277\247\267\310''-ûʱ'$'\274\344''.mp3' ''$'\325''Ż'$'\335\303\303''-'$'\310\347\271\373\304\343''Ҳ'$'\314\375''˵.mp3' 'ţ'$'\304\314''@'$'\277\247\267\310''-'$'\310\347\271\373\303\367\314\354''.mp3' ''$'\325\305\323\352\311\372''-'$'\264\363\272\243''.mp3' 'ţ'$'\304\314''@'$'\277\247\267\310''-'$'\320\322\324\313\320\307''.mp3' ''$'\326\334''ޥ-Լ'$'\266\250''.mp3' 'ţ'$'\304\314''@'$'\277\247\267\310''-Խ'$'\263\244\264\363''Խ'$'\271''µ'$'\245''.mp3'
使用的是GBK编码,\260\242\313\301,对应的是周慧,
目前没支持gbk编码,应该能修。
我重新上传成utf8的文件名,就可以刷新出列表了,代码如果方便修改兼容则最好,不方便可以在说明文档里面注明,或者在面板中提示一下,谢谢你的回复