Minecraft的疑难杂症#8-使用UTF-8编码导致无法打开在含中文字符路径下的游戏
好久没来更新了,主要是最近空闲时间不多+接触的一些崩溃比较常见(或者是直接无解哈哈哈哈哈)
今天来放一个比较特别的崩溃,是关于使用了Unicode UTF-8编码规则处理一些特殊字符(如汉字)的问题。至于怎么引起的,应该是一些跟GBK编码规则上的冲突,具体如何冲突... ...能把MC启动起来就好了吧w
以下是我在本地测试的崩溃日志(崩溃日志行数不会太多,一般是启动就崩溃):
����: �Ҳ��������������� net.minecraft.launchwrapper.Launch
或者是
����: �Ҳ��������������� net.minecraft.client.main.Main
我的世界原版(香草版)
WARNING: Unknown module: cpw.mods.securejarhandler specified to --add-exports
WARNING: Unknown module: cpw.mods.securejarhandler specified to --add-opens
����: �Ҳ��������������� cpw.mods.bootstraplauncher.BootstrapLauncher
ԭ��: java.lang.ClassNotFoundException: cpw.mods.bootstraplauncher.BootstrapLauncher
Forge版
����: �Ҳ��������������� net.fabricmc.loader.impl.launch.knot.KnotClient
ԭ��: java.lang.ClassNotFoundException: net.fabricmc.loader.impl.launch.knot.KnotClient
Fabric版
补充补充:发完文章的第二天收到个崩溃解决的请求,也收到个是通过下面的方法解决的,和上面提到的不太一样所以我也贴出来:
[15七月2022 12:02:12.434] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--username, ShiomiyaShiori, --version, [1.16.5]鍩冨強鎵撶墝涔嬫梾, --gameDir, G:\Minecraft\Pi\.minecraft, --assetsDir, G:\Minecraft\Pi\.minecraft\assets, --assetIndex, 1.16, --uuid, 84a3214c17714744af6b7640bf346f36, --accessToken, ????????, --userType, Mojang, --versionType, PCL2, --width, 854, --height, 480, --launchTarget, fmlclient, --fml.forgeVersion, 36.2.35, --fml.mcVersion, 1.16.5, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20210115.111550]
[15七月2022 12:02:12.438] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 8.1.3+8.1.3+main-8.1.x.c94d18ec starting: java version 1.8.0_60 by Oracle Corporation
[15七月2022 12:02:12.465] [main/WARN] [cpw.mods.modlauncher.SecureJarHandler/]: LEGACY JDK DETECTED, SECURED JAR HANDLING DISABLED
[15七月2022 12:02:12.611] [main/INFO] [optifine.OptiFineTransformationService/]: OptiFineTransformationService.onLoad
[15七月2022 12:02:12.612] [main/INFO] [optifine.OptiFineTransformationService/]: OptiFine ZIP file: G:\Minecraft\Pi\.minecraft\mods\[高清修复]OptiFine_1.16.5_HD_U_G8.jar
[15七月2022 12:02:12.614] [main/INFO] [optifine.OptiFineTransformer/]: Target.PRE_CLASS is available
[15七月2022 12:02:12.717] [main/INFO] [net.minecraftforge.fml.loading.FixSSL/CORE]: Added Lets Encrypt root certificates as additional trust
[15七月2022 12:02:12.772] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.4 Source=file:/G:/Minecraft/Pi/.minecraft/libraries/org/spongepowered/mixin/0.8.4/mixin-0.8.4.jar Service=ModLauncher Env=CLIENT
[15七月2022 12:02:12.784] [main/INFO] [optifine.OptiFineTransformationService/]: OptiFineTransformationService.initialize
[15七月2022 12:02:12.887] [main/INFO] [STDERR/]: [org.lwjgl.system.Library:printError:424]: [LWJGL] Failed to load a library. Possible solutions:
a) Add the directory that contains the shared library to -Djava.library.path or -Dorg.lwjgl.librarypath.
b) Add the JAR that contains the shared library to the classpath.
[15七月2022 12:02:12.889] [main/INFO] [STDERR/]: [org.lwjgl.system.Library:printError:426]: [LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for Better diagnostics.
[15七月2022 12:02:12.889] [main/INFO] [STDERR/]: [org.lwjgl.system.Library:printError:428]: [LWJGL] Enable the SharedLibraryLoader debug mode with -Dorg.lwjgl.util.DebugLoader=true for Better diagnostics.
[15七月2022 12:02:12.890] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: java.lang.UnsatisfiedLinkError: Failed to locate library: lwjgl.dll
[15七月2022 12:02:12.890] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at org.lwjgl.system.Library.loadSystem(Library.java:147)
[15七月2022 12:02:12.891] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at org.lwjgl.system.Library.loadSystem(Library.java:67)
[15七月2022 12:02:12.891] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at org.lwjgl.system.Library.<clinit>(Library.java:50)
[15七月2022 12:02:12.891] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at org.lwjgl.system.MemoryUtil.<clinit>(MemoryUtil.java:97)
[15七月2022 12:02:12.891] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at org.lwjgl.system.Pointer$Default.<clinit>(Pointer.java:67)
[15七月2022 12:02:12.892] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at org.lwjgl.system.Callback.<clinit>(Callback.java:40)
[15七月2022 12:02:12.892] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at net.minecraftforge.fml.loading.progress.ClientVisualization.initWindow(ClientVisualization.java:55)
[15七月2022 12:02:12.892] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at net.minecraftforge.fml.loading.progress.ClientVisualization.start(ClientVisualization.java:335)
[15七月2022 12:02:12.892] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at net.minecraftforge.fml.loading.progress.EarlyProgressVisualization.accept(EarlyProgressVisualization.java:29)
[15七月2022 12:02:12.892] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at net.minecraftforge.fml.loading.FMLLoader.setupLaunchHandler(FMLLoader.java:176)
[15七月2022 12:02:12.893] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at net.minecraftforge.fml.loading.FMLServiceProvider.initialize(FMLServiceProvider.java:80)
[15七月2022 12:02:12.893] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at cpw.mods.modlauncher.TransformationServiceDecorator.onInitialize(TransformationServiceDecorator.java:68)
[15七月2022 12:02:12.893] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at cpw.mods.modlauncher.TransformationServicesHandler.lambda$initialiseTransformationServices$7(TransformationServicesHandler.java:107)
[15七月2022 12:02:12.893] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at java.util.HashMap$Values.forEach(Unknown Source)
[15七月2022 12:02:12.893] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at cpw.mods.modlauncher.TransformationServicesHandler.initialiseTransformationServices(TransformationServicesHandler.java:107)
[15七月2022 12:02:12.894] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:59)
[15七月2022 12:02:12.894] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at cpw.mods.modlauncher.Launcher.run(Launcher.java:76)
[15七月2022 12:02:12.894] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:-1]: at cpw.mods.modlauncher.Launcher.main(Launcher.java:66)
其实发现上面版本命名出现乱码(已加粗显示)一般情况其实也见得多,不过现在也要注意下有没有这种崩溃的可能性了(。然后,java.lang.UnsatisfiedLinkError: Failed to locate library: lwjgl.dll的出现也可能要检查下是否需要进行下面解决方案的操作。
其他版本应该崩溃得差不多,都是有这种“�”奇怪字符组成的。
解决方案:
取消勾选 使用unicode utf 8 提供全球语言支持 选项。
不少玩家遇到这种崩溃都是因为勾选了 使用unicode utf 8 提供全球语言支持 选项,请参照以下图片去取消这个选项。

还在Beta(测试)版不是么,所以不要去勾选它嘛(
如果第一条方案无效,或者你不想取消勾选以上选项,你也可以将游戏文件放到不含特殊字符的路径(例如由英文或数字字符命名储存的文件夹)。
这里是我的补充:
发了文章之后,从启动器给我的在启动的Forge版本实时日志里看,看到了那些乱码的中文:“错误:找不到或无法加载主类(第一行)原因:(第二行)”
就这样,该怎么整就怎么整,这只是补充。
相关链接:
java.lang.ClassNotFoundException: net.fabricmc.loader.impl.launch.knot.KnotCl... - Mod问答 - Minecraft(我的世界)中文论坛 - (https://www.mcbbs.net/forum.php?mod=redirect&goto=findpost&ptid=1321234&pid=25204874)