本帖最后由 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编码指的又不是。。别弄混了
同是解决方法!
