EmmyLua / VSCode-EmmyLua

Lua IDE/Debugger Plugin for VSCode
632 stars 89 forks source link

GBK文件注释有概率显示乱码 #164

Closed tinymins closed 2 months ago

tinymins commented 2 months ago

注:A.lua 与 B.lua 都是 GBK 编码。

新建文件时正常: image

保存后立马乱码: image

重启编辑器,在A.lua没有打开之前,B.lua显示乱码: image

此时打开一次 A.lua 文件,再看 B.lua 的注释就正常了: image

完整项目地址: https://github.com/tinymins/JX3Boilerplate

CppCXY commented 2 months ago

vscode默认打开文件的方式是UTF8 你改过files.encoding设置没有

CppCXY commented 2 months ago

在vscode的工作区配置添加然后重启vscode:

    "files.encoding": "gbk"
tinymins commented 2 months ago

在vscode的工作区配置添加然后重启vscode:

    "files.encoding": "gbk"

image 有的,一直有这个设置

tinymins commented 2 months ago

vscode默认打开文件的方式是UTF8 你改过files.encoding设置没有

正式因为加了设置,所以文件在每次打开后,乱码就会消失,这也是我们使用插件看到乱码时候的处理办法,按住ALT追踪过去一下,乱码就暂时消失了。

CppCXY commented 2 months ago

插件版本呢

tinymins commented 2 months ago

image 0.8.0

插件版本呢

CppCXY commented 2 months ago

我感觉是因为你没有使用setting.json的问题, 让插件没有获取编码信息: image "好好好"是定义在另一个文件的变量,项目编码设置为GBK, 在完全重启插件后能正常提示

tinymins commented 2 months ago

那意思是,一定要写在 setting.json 中,而不能写在 .code-workspace 中,插件是主动去 setting.json 文件获取的编码么?

tinymins commented 2 months ago

那意思是,一定要写在 setting.json 中,而不能写在 .code-workspace 中,插件是主动去 setting.json 文件获取的编码么?

我去试试在每个文件夹下都增加一份 setting.json 试试,一个 workspace 包含了很多个文件夹,不知道这么加能不能用

image

CppCXY commented 2 months ago

通常只有第一个工作区的配置有效

tinymins commented 2 months ago

image 实测不能生效,设置完后重启vscode,乱码依旧,看起来插件无法兼容 workspace 的编码

CppCXY commented 2 months ago

我clone 了你的项目, 没有看到和你一样的代码结构

tinymins commented 2 months ago

我感觉是因为你没有使用setting.json的问题, 让插件没有获取编码信息: image "好好好"是定义在另一个文件的变量,项目编码设置为GBK, 在完全重启插件后能正常提示

以及中文似乎不能作为变量名,在我这会报错,我是注释中文 image

tinymins commented 2 months ago

我clone 了你的项目, 没有看到和你一样的代码结构

因为是多个仓库,您可以直接创建一个 workspace,内容:

Boilerplate.code-workspace

{
    "folders": [
        {
            "path": "JX3Boilerplate"
        }
    ],
    "settings": {
        "editor.tabSize": 4,
        "editor.renderWhitespace": "all",
        "editor.insertSpaces": false,
        "files.encoding": "gbk",
        "files.autoGuessEncoding": true,
        "files.eol": "\n",
        "files.trimTrailingWhitespace": true,
        "files.trimFinalNewlines": true,
        "files.associations": {
            "*.lang": "lua",
            "*.jx3dat": "lua"
        },
        "flake8.args": [
            "--ignore=E501,E722"
        ],
        "lua.targetVersion": "5.1",
        "psi-header.changes-tracking": {
            "isActive": true,
            "exclude": [
                "markdown",
                "json",
                "html",
                "vue",
                "jx3dat"
            ],
            "autoHeader": "off"
        },
        "psi-header.lang-config": [{
            "language": "lua",
            "begin": "--------------------------------------------------------",
            "prefix": "-- ",
            "end": "--------------------------------------------------------",
            "blankLinesAfter": 0
        }],
        "psi-header.templates": [{
            "language": "*",
            "template": [
                "This file is part of the JX3 Plugin Project.",
                "@desc     : ",
                "@copyright: Copyright (c) 2009 Kingsoft Co., Ltd.",
            ]
        }],
        "[lua]": {
            "files.encoding": "gbk",
            "files.autoGuessEncoding": false,
        },
        "[ini]": {
            "files.encoding": "gbk",
            "files.autoGuessEncoding": false,
            "files.trimFinalNewlines": false,
            "files.trimTrailingWhitespace": false,
        },
        "[markdown]": {
            "files.encoding": "utf8",
            "files.autoGuessEncoding": false,
        },
        "[python]": {
            "files.encoding": "utf8",
            "files.autoGuessEncoding": false,
        },
        "luahelper.format.extra_sep_at_table_end": true,
        "luahelper.Warn.CheckLocalNoUse": true,
        "luahelper.Warn.CheckNoUseAssign": true,
        "luahelper.base.ignoreFileOrDir": [
            "\\.vscode/"
        ],
        "luahelper.base.ignoreFileOrDirError": [
            "\\.vscode/",
            "zhtw\\.jx3dat",
            "dist/",
            "src\\..*\\.lua",
            ".*\\.min\\.jx3dat"
        ],
        "cSpell.words": [
            "Sysmsg",
            "wstring"
        ],
    },
    "launch": {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "LuaHelper-Debug",
                "request": "launch",
                "name": "LuaHelper-Attach",
                "description": "通用模式,通常调试项目请选择此模式",
                "cwd": "${workspaceFolder:Boilerplate}",
                "luaFileExtension": "",
                "connectionPort": 8828,
                "stopOnEntry": true,
                "useCHook": true,
                "autoPathMode": true
            },
            {
                "type": "LuaHelper-Debug",
                "request": "launch",
                "name": "LuaHelper-DebugFile",
                "description": "独立文件调试模式",
                "luaPath": "",
                "packagePath": [],
                "luaFileExtension": "",
                "connectionPort": 8828,
                "stopOnEntry": true,
                "useCHook": true
            }
        ]
    }
}

将其放在 JX3Boilerplate 同级目录后用vscode打开即可

tinymins commented 2 months ago

实测,在完全相同环境下,单独启用腾讯的 LuaHelper,Tip不会展示乱码,单独启用 EmmyLua 展示乱码,同时启用展示一条乱码一条不乱码 注:每次启用、禁用后 都重启过 vscode。

单独 LuaHelper image

单独 EmmyLua image

同时启用 image

tinymins commented 2 months ago

~请问有 donate 方式吗,我在 README 中没有看到,~ 我也是做开源插件的(只不过我的是游戏插件),感谢抽空处理问题,想请喝奶茶

找到了,支付宝投币100元 😸

CppCXY commented 2 months ago

~请问有 donate 方式吗,我在 README 中没有看到,~ 我也是做开源插件的(只不过我的是游戏插件),感谢抽空处理问题,想请喝奶茶

找到了,支付宝投币100元 😸

你做的好, 但我实际上并不能收到. 这是以前emmylua作者tangzx的链接, 而我并不是他.

你的问题是, 由于当前实现的问题, 你没有创建.emmyrc.json所以gbk的配置无效

tinymins commented 2 months ago

~请问有 donate 方式吗,我在 README 中没有看到,~ 我也是做开源插件的(只不过我的是游戏插件),感谢抽空处理问题,想请喝奶茶 找到了,支付宝投币100元 😸

你做的好, 但我实际上并不能收到. 这是以前emmylua作者tangzx的链接, 而我并不是他.

你的问题是, 由于当前实现的问题, 你没有创建.emmyrc.json所以gbk的配置无效

感谢,请问您有donate方式吗,愿意再请一杯下午茶。

乱码看起来是腾讯的会自动识别编码,而EmmyLua需要手动指定,腾讯的LuaHelper我没有做特别设置。

CppCXY commented 2 months ago

感谢,请问您有donate方式吗,愿意再请一杯下午茶。

不用了, 感谢他就行了.

乱码看起来是腾讯的会自动识别编码,而EmmyLua需要手动指定,腾讯的LuaHelper我没有做特别设置。

乱码问题是因为: 没有添加配置文件导致后续处理被跳过了, 本质上也不需要配置. 但是emmylua配置项非常多最好还是配置下, 当前最快的修复方法是在首个工作区内创建一个空的.emmyrc.json文件

CppCXY commented 2 months ago

感谢,请问您有donate方式吗,愿意再请一杯下午茶。

不用了, 感谢他就行了.

乱码看起来是腾讯的会自动识别编码,而EmmyLua需要手动指定,腾讯的LuaHelper我没有做特别设置。

乱码问题是因为: 没有添加配置文件导致后续处理被跳过了, 本质上也不需要配置. 但是emmylua配置项非常多最好还是配置下, 当前最快的修复方法是在首个工作区内创建一个空的.emmyrc.json文件

貌似还不行? 等会研究下

tinymins commented 2 months ago

感谢,请问您有donate方式吗,愿意再请一杯下午茶。

不用了, 感谢他就行了.

乱码看起来是腾讯的会自动识别编码,而EmmyLua需要手动指定,腾讯的LuaHelper我没有做特别设置。

乱码问题是因为: 没有添加配置文件导致后续处理被跳过了, 本质上也不需要配置. 但是emmylua配置项非常多最好还是配置下, 当前最快的修复方法是在首个工作区内创建一个空的.emmyrc.json文件

貌似还不行? 等会研究下

可以了,不能是空文件,必须有内容,内容为空配置 {} 即可。

tinymins commented 2 months ago

给项目都增加了空配置解决问题,不过有可能的话还是建议不增加空配置也能自动识别项目编码,易用性会高一些,再次感谢!

CppCXY commented 2 months ago

给项目都增加了空配置解决问题,不过有可能的话还是建议不增加空配置也能自动识别项目编码,易用性会高一些,再次感谢!

我发现你配置了 jx3dat 视为lua文件, 而这些文件原本是utf8编码, emmylua语言服务把他视为gbk编码解析, 导致了巨量的报错, 影响性能, 建议排除这些目录或者不要视为lua文件

tinymins commented 2 months ago

jx3dat

jx3dat 文件有些是 utf8 有些是 gbk ,这个类型文件是跟随游戏客户端的( zhcn.jx3dat 是 gbk ,zhtw.jx3dat 是 utf8 ),我看看如何排除 utf8 的,感谢!

CppCXY commented 2 months ago

jx3dat

jx3dat 文件有些是 utf8 有些是 gbk ,这个类型文件是跟随游戏客户端的( zhcn.jx3dat 是 gbk ,zhtw.jx3dat 是 utf8 ),我看看如何排除 utf8 的,感谢!

image 可以在.emmyrc.json配置这个排除整个目录

tinymins commented 2 months ago

jx3dat

jx3dat 文件有些是 utf8 有些是 gbk ,这个类型文件是跟随游戏客户端的( zhcn.jx3dat 是 gbk ,zhtw.jx3dat 是 utf8 ),我看看如何排除 utf8 的,感谢!

image 可以在.emmyrc.json配置这个排除整个目录

请问下是如何看到报错的,我在 Output 里面没找到,因为我想试试 ignoreDir 是否支持通配符,其实所有 "*/data/" 目录都应该排除。

CppCXY commented 2 months ago

请问下是如何看到报错的,我在 Output 里面没找到,因为我想试试 ignoreDir 是否支持通配符,其实所有 "*/data/" 目录都应该排除。

不支持通配符, 因为这可能会有性能问题, 如果你想支持通配符可以考虑提交PR

CppCXY commented 2 months ago

不支持通配符, 因为这可能会有性能问题, 如果你想支持通配符可以考虑提交PR

项目地址: https://github.com/CppCXY/EmmyLuaAnalyzer

tinymins commented 1 month ago

请问下是如何看到报错的,我在 Output 里面没找到,因为我想试试 ignoreDir 是否支持通配符,其实所有 "*/data/" 目录都应该排除。

不支持通配符, 因为这可能会有性能问题, 如果你想支持通配符可以考虑提交PR

已提交