本帖最后由 andylizi 于 2016-4-19 14:08 编辑 
正题
我的ColorMOTD插件在1.7.2服务器里,自动生成的配置文件:(版主别说我广告之类的……不举个梨子哪成)

我的ColorMOTD插件在1.8服务器里,自动生成的配置文件:

大概除了机器,只有鬼能看懂了。不止是我的ColorMOTD,所有的插件的配置文件里的中文全部都会变成这样。
现在我的ColorMOTD的发布贴有一堆反馈这问题的,各种看不懂
郁闷。1.7.5以前的服务器完全没这问题
于是经过我九九八十一天的追查,终于找到了罪魁祸首并将其逮捕归案

多了一行代码。
这就是原因。
【解决办法 - 对于插件开发者】
【解决办法 - 对于服主】
1.9服务器已修复这个bug,所以此问题只限于1.7.5-1.8.8服务器
正题
我的ColorMOTD插件在1.7.2服务器里,自动生成的配置文件:(版主别说我广告之类的……不举个梨子哪成)

我的ColorMOTD插件在1.8服务器里,自动生成的配置文件:

大概除了机器,只有鬼能看懂了。不止是我的ColorMOTD,所有的插件的配置文件里的中文全部都会变成这样。
现在我的ColorMOTD的发布贴有一堆反馈这问题的,各种看不懂
郁闷。1.7.5以前的服务器完全没这问题
于是经过我

多了一行代码。
这就是原因。
【解决办法 - 对于插件开发者】
【解决办法 - 对于服主】
{:10_553:}码字辛苦了。
于是不得不继续面对编码问题,为了可读性放弃可移植性,
个人认为这种方式不可取。
(另一群人跑过来问你:本地配置好的服务端上传到服务器怎么不能跑了呀?)
个人认为这种方式不可取。
(另一群人跑过来问你:本地配置好的服务端上传到服务器怎么不能跑了呀?)
RecursiveG 发表于 2015-12-26 08:01
于是不得不继续面对编码问题,为了可读性放弃可移植性,
个人认为这种方式不可取。
(另一群人跑过来问你: ...
事实上转码还是很方便的= =
但是....中文全部变成U码是很痛苦的一件事..
每次我都要转换来转换去
麻烦程度可想而知
所以
给梨子赞一个
我是梨子的脑残粉~
RecursiveG 发表于 2015-12-26 08:01
于是不得不继续面对编码问题,为了可读性放弃可移植性,
个人认为这种方式不可取。
(另一群人跑过来问你: ...
至少我解决了2333对于小白来说这是很头疼滴
RecursiveG 发表于 2015-12-26 08:01
于是不得不继续面对编码问题,为了可读性放弃可移植性,
个人认为这种方式不可取。
(另一群人跑过来问你: ...
话说google的common.io包里面貌似有编码判断的API,我知道这种判断不一定准,不过应该还是有用的,只是不知道好不好用,也不知道服务端核心文件里的common包有没有加进来这部分
splt 发表于 2015-12-26 11:25
话说google的common.io包里面貌似有编码判断的API,我知道这种判断不一定准,不过应该还是有用的,只是不 ...
加了commons.io、codec和lang。话说这个编码跟unicode没关系,unicode严格来说又不是编码
andylizi 发表于 2015-12-26 13:25
加了commons.io、codec和lang。话说这个编码跟unicode没关系,unicode严格来说又不是编码 ...
他说的是可移植性,应该是说的编码问题吧?用你的方法解决中文变u码的问题,可移植性用这个解决,不知可以否
splt 发表于 2015-12-26 13:56
他说的是可移植性,应该是说的编码问题吧?用你的方法解决中文变u码的问题,可移植性用这个解决,不知可 ...
我覆盖的DumperOptions类里面并没有任何跟编码有关系的内容
andylizi 发表于 2015-12-26 14:00
我覆盖的DumperOptions类里面并没有任何跟编码有关系的内容
嗯确实是这样……
那个人说可移植性应该是说Linux和Windows要上使用带中文的配置文件需要不同的编码吧?而没有中文的u码就能解决这个问题,或许这也是bukkit强制设为u码的原因?
他的意思是本地配好的服务端由于编码不同无法直接在服务器使用,那么我就想或许可以用判断编码的方式给配置文件自动转个码,解决这个问题?
cauldron服主咋办QAQ
Unicode转码网站:http://sandbox.runjs.cn/show/p0wqxbgx
Viosin 发表于 2016-1-1 13:14
Unicode转码网站:http://sandbox.runjs.cn/show/p0wqxbgx
如果你喜欢编辑一次配置文件转码一次,请便
强转我不反对。
你能不给我转错行么?
转完直接乱码[翻译成gbk]
我都不能汉化了!
你能不给我转错行么?
转完直接乱码[翻译成gbk]
我都不能汉化了!
java.lang.NoSuchMethodError: org.yaml.snakeyaml.DumperOptions.getExplicitRoot()L
org/yaml/snakeyaml/nodes/Tag;
at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:262)
at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:234)
at org.yaml.snakeyaml.Yaml.dump(Yaml.java:209)
at org.bukkit.configuration.file.YamlConfiguration.saveToString(YamlConf
iguration.java:40)
at org.bukkit.configuration.file.FileConfiguration.save(FileConfiguratio
n.java:103)
at org.github.paperspigot.PaperSpigotConfig.readConfig(PaperSpigotConfig
.java:98)
at org.github.paperspigot.PaperSpigotConfig.init(PaperSpigotConfig.java:
62)
at org.github.paperspigot.PaperSpigotConfig.<clinit>(PaperSpigotConfig.j
ava:40)
at net.minecraft.server.v1_7_R4.ItemBucket.<init>(ItemBucket.java:18)
at net.minecraft.server.v1_7_R4.Item.l(Item.java:114)
at net.minecraft.server.v1_7_R4.DispenserRegistry.b(SourceFile:358)
at net.minecraft.server.v1_7_R4.MinecraftServer.main(MinecraftServer.jav
a:821)
at org.bukkit.craftbukkit.Main.main(Main.java:199)
paperspigot-1.7.10
org/yaml/snakeyaml/nodes/Tag;
at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:262)
at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:234)
at org.yaml.snakeyaml.Yaml.dump(Yaml.java:209)
at org.bukkit.configuration.file.YamlConfiguration.saveToString(YamlConf
iguration.java:40)
at org.bukkit.configuration.file.FileConfiguration.save(FileConfiguratio
n.java:103)
at org.github.paperspigot.PaperSpigotConfig.readConfig(PaperSpigotConfig
.java:98)
at org.github.paperspigot.PaperSpigotConfig.init(PaperSpigotConfig.java:
62)
at org.github.paperspigot.PaperSpigotConfig.<clinit>(PaperSpigotConfig.j
ava:40)
at net.minecraft.server.v1_7_R4.ItemBucket.<init>(ItemBucket.java:18)
at net.minecraft.server.v1_7_R4.Item.l(Item.java:114)
at net.minecraft.server.v1_7_R4.DispenserRegistry.b(SourceFile:358)
at net.minecraft.server.v1_7_R4.MinecraftServer.main(MinecraftServer.jav
a:821)
at org.bukkit.craftbukkit.Main.main(Main.java:199)
paperspigot-1.7.10
 本帖最后由 123mbcz123 于 2016-2-6 16:53 编辑 
第一个。
把汉化文件放进去[gbk编码]
假设第一行为
name: 商店
自动转化结果为
name: "\u935f\u55d7\u7c35"
我很好奇。他是如何把两个字转化成3个字
\u935f\u55d7\u7c35转成gbk为 "鍟嗗簵"
然后就乱码了。。自动转换有问题。。手动转码没问题。
还有。按照你的方法替换报错了。。1。8.7没问题1.7.10报错。。
详见另一条留言uft-8 都试了多少遍
andylizi 发表于 2016-2-6 15:55
请问你在说啥啊我没听懂
另外为什么你不试试utf-8
第一个。
把汉化文件放进去[gbk编码]
假设第一行为
name: 商店
自动转化结果为
name: "\u935f\u55d7\u7c35"
我很好奇。他是如何把两个字转化成3个字
\u935f\u55d7\u7c35转成gbk为 "鍟嗗簵"
然后就乱码了。。自动转换有问题。。手动转码没问题。
还有。按照你的方法替换报错了。。1。8.7没问题1.7.10报错。。
详见另一条留言uft-8 都试了多少遍
今天才想起来,去翻了api,FileConfiguration发现了SYSTEM_UTF,是在public final static修饰并在static块初始化的,我觉得吧_(:зゝ∠)_直接用反射去掉final修饰然后把值改了,就OK了= ̄ω ̄=
splt 发表于 2016-2-12 18:33
今天才想起来,去翻了api,FileConfiguration发现了SYSTEM_UTF,是在public final static修饰并在static块 ...
似乎final static是无法修改的?@RecursiveG
andylizi 发表于 2016-2-12 19:14
似乎final static是无法修改的?@RecursiveG
可以的,你field.setModifier把final修饰去掉就好了
其实不打紧啊..  放进这玩意里去转一下就可以了
 
 
 
插件开发者一次性解决好多插件的U码也会累死的吧
在启动程序后门加上-Dfile.encoding=UTF-8不就得了吗?
如:JAVA -Xmx256M -jar spigot-1.8.8.jar -Dfile.encoding=UTF-8
如:JAVA -Xmx256M -jar spigot-1.8.8.jar -Dfile.encoding=UTF-8
芒果苦力怕 发表于 2016-3-21 10:15
在启动程序后门加上-Dfile.encoding=UTF-8不就得了吗?
如:JAVA -Xmx256M -jar spigot-1.8.8.jar -Dfile.e ...
这是控制“字符编码”,但unicode编码指的又不是。。别弄混了
andylizi 发表于 2016-3-21 11:26
这是控制“字符编码”,但unicode编码指的又不是。。别弄混了
同是解决方法!
芒果苦力怕 发表于 2016-3-21 11:29
同是解决方法!
UTF-8跟unicode是不一样的,utf-8指的是把字符编码为byte[]并把byte[]解码为字符的方式,然而unicode跟这个没有直接关系
例如:
 
 
我也不知道该怎么形容好了
对了,你的-Dfile.encoding=UTF-8有错误,jvm参数必须加在-jar前面,不然就变成了jar参数了
andylizi 发表于 2016-3-21 11:33
UTF-8跟unicode是不一样的,utf-8指的是把字符编码为byte[]并把byte[]解码为字符的方式,然而unicode跟这 ...
难道不是解决方法吗?
芒果苦力怕 发表于 2016-3-21 11:45
难道不是解决方法吗?
我说了utf-8跟unicode不一样,那你加上utf-8怎么可能解决unicode编码的问题?
andylizi 发表于 2016-3-21 11:47
我说了utf-8跟unicode不一样,那你加上utf-8怎么可能解决unicode编码的问题?
你这人是不是跟我有仇, ...
我记得我之前测试过
我用llinux主机的时候
编码UTF-8,不会出现unicode编码的问题
服务器版本是1.8.8
芒果苦力怕 发表于 2016-3-21 12:17
我记得我之前测试过
我用llinux主机的时候
编码UTF-8,不会出现unicode编码的问题
好吧,不争了,你自己去windows环境下试试你的代码吧
 本帖最后由 芒果苦力怕 于 2016-3-21 12:24 编辑 
嗯,你也可以去试试
@andylizi嗯,我去试(别生气哈)
andylizi 发表于 2016-3-21 12:18
好吧,不争了,你自己去windows环境下试试你的代码吧
嗯,你也可以去试试
@andylizi嗯,我去试(别生气哈)
弄了这个以后,我之前的插件config会自动变成中文的吗,还是会出现错误无法使用?需要把之前的config重新建一遍吗?
spigot1.8替换完之后泵崩服 -
---- Minecraft Crash Report ----
// Why did you do that?
Time: 16-4-19 上午3:42
Description: Exception in server tick loop
java.lang.NoSuchMethodError: org.yaml.snakeyaml.DumperOptions.getSplitLines()Z
at org.yaml.snakeyaml.emitter.Emitter.<init>(Emitter.java:198)
at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:237)
at org.yaml.snakeyaml.Yaml.dumpAll(Yaml.java:206)
at org.yaml.snakeyaml.Yaml.dump(Yaml.java:181)
at org.bukkit.configuration.file.YamlConfiguration.saveToString(YamlConfiguration.java:40)
at org.bukkit.configuration.file.FileConfiguration.save(FileConfiguration.java:103)
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.saveConfig(CraftServer.java:272)
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.<init>(CraftServer.java:212)
at net.minecraft.server.v1_8_R3.PlayerList.<init>(PlayerList.java:71)
at net.minecraft.server.v1_8_R3.DedicatedPlayerList.<init>(SourceFile:14)
at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:176)
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525)
at java.lang.Thread.run(Unknown Source)
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- System Details --
Details:
Minecraft Version: 1.8.8
Operating System: Windows Server 2008 R2 (amd64) version 6.1
Java Version: 1.8.0_73, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 179200744 bytes (170 MB) / 245891072 bytes (234 MB) up to 954728448 bytes (910 MB)
JVM Flags: 3 total; -Xmx1G -XX:+AggressiveOpts -XX:+UseCompressedOops
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
CraftBukkit Information:
Running: CraftBukkit version git-Spigot-5f38d38-9d7764c (MC: 1.8.8) (Implementing API version 1.8.8-R0.1-SNAPSHOT)
Failed to handle CraftCrashReport:
java.lang.NullPointerException
at net.minecraft.server.v1_8_R3.MinecraftServer.getOnlineMode(MinecraftServer.java:1285)
at org.bukkit.craftbukkit.v1_8_R3.CraftCrashReport.call(CraftCrashReport.java:20)
at net.minecraft.server.v1_8_R3.CrashReportSystemDetails.a(SourceFile:78)
at net.minecraft.server.v1_8_R3.CrashReport.h(CrashReport.java:127)
at net.minecraft.server.v1_8_R3.CrashReport.<init>(CrashReport.java:34)
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:577)
at java.lang.Thread.run(Unknown Source)
Profiler Position: N/A (disabled)
Is Modded: Definitely; Server brand changed to 'Spigot'
Type: Dedicated Server (map_server.txt)
替换完后开服,没开起来,就崩掉了,然后就生成了蹦服报告
芒果苦力怕 发表于 2016-4-19 03:47
替换完后开服,没开起来,就崩掉了,然后就生成了蹦服报告
woc。。。难道每个服务端版本都升级一次snakeyaml吗。。。稍等,马上解决
andylizi 发表于 2016-4-19 09:51
woc。。。难道每个服务端版本都升级一次snakeyaml吗。。。稍等,马上解决
好了吗?
请发出你使用的服务端核心
123mbcz123 发表于 2016-2-6 16:42
第一个。
把汉化文件放进去[gbk编码]
假设第一行为
报错已解决。重下
KC端核心里,怎么没这个文件,也没\yaml\snakeyaml
haixing 发表于 2017-1-15 00:20
KC端核心里,怎么没这个文件,也没\yaml\snakeyaml
你不会打开了minecraft.server.jar吧
andylizi 发表于 2017-1-15 07:22
你不会打开了minecraft.server.jar吧
不是啊,你看
请问KC端怎么解决,代码也改了还是不行,代替文件也不行,因为服务端本体里没有那个文件。。
刘在石 发表于 2017-1-21 16:15
请问KC端怎么解决,代码也改了还是不行,代替文件也不行,因为服务端本体里没有那个文件。。 ...
你不会打开了minecraft.server.jar吧
andylizi 发表于 2017-1-21 16:33
你不会打开了minecraft.server.jar吧
真没有 = =
即使替换了 还是会自动转码啊..
版本是1.8.8PaperSpigot
版本是1.8.8PaperSpigot
Thermos 模组服的核心文件里没有那个 \org\yaml\snakeyaml 目录,该肿么办呢?
