windows平台下,以geoserver-2.21.5默认样式dem
为例,在修改其中的某个值为中文后,出现报错:UTF-8序列的字节无效
先不管,点击保存后出现中文字体字符编码错误问题。
到data_dir/styles
找到对应的文件,发现sld文件变为ANSI格式(原是utf-8),
另存为UTF-8格式后,重新查看样式发现编辑框中显示的格式出现乱码,但能正常运行。
解决方案1:修改encoding 为GBK,文本框和图例恢复正常,但是sld文件仍然是ANSI格式。
ANSI在不同地区系统中表示含义不一致,简体中文 windows下ANSI为GBK编码,其他国家语言又是另一种,ANSI是一种编码规范,它的基础是ASCII码,其他国家自己制定编码规则加入到ANSI中,这导致不同语言ANSI码可能存在冲突。
但这只能说明geoserver 读取简体中文系统的(GBK)ANSI格式的sld不会出现乱码,但是utf-8格式存储的sld放到编辑框里确出现了乱码,说明编辑框中显示的编码规则与utf-8不一致,是按照系统默认字符编码规则去显示的。
解决方案2:由上面可知,geoserver将sld文件导出为了GBK(ANSI)格式,也就是说,可以通过声明java的导出编码格式来解决这个问题。参考:
https://gis.stackexchange.com/questions/417471/problem-with-geoserver-sld-style-encoding-utf-8-chars
https://gis.stackexchange.com/questions/371140/unicode-problem-in-creating-style-with-rest-api-on-geoserver/371418#371418
在startup.bat 文件前面声明环境变量:
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
注意windows 和linux 的写法。此时再去看原先的dem样式,发现编辑器中出现乱码,修改后保存,查看预览和实际文件,正常(样式文件已为utf-8)
完整的bat文件
echo Temporarily setting GEOSERVER_HOME AND JAVA_HOME to the following directory:
cd ..
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
set GEOSERVER_HOME=%CD%
echo GEOSERVER_HOME: %GEOSERVER_HOME%
set GEOSERVER_DATA_DIR=%GEOSERVER_HOME%\data_dir
echo GEOSERVER_DATA_DIR: %GEOSERVER_DATA_DIR%
set JAVA_HOME=%GEOSERVER_HOME%\jdk1.8.0_431
echo JAVA_HOME: %JAVA_HOME%
cd bin
echo.
call startup.bat
pause