JREPL.BAT问题:/INC参数含Unicode符号的字符串无法识别
问题描述
在JREPL的/INC参数中使用包含Unicode符号的字符串(示例:Buzz!™ 100 Questions Correct T-shirt,对应变量!REFID_NAME_STRING!)作为起始位置时,JREPL无法识别该Unicode符号,导致输出文件为空;移除符号后可正常运行。执行的命令如下:
CALL JREPL "(.*)" "$txt=$1" /I /XSEQ /JMATCHQ /INC "'<LANG ID=\qREF\q>!REFID_NAME_STRING!</LANG>':'</PHRASE>'" /EXC "'</PHRASE>','<LANG ID=\qREF\q>'" /F "%SRC1%!SRCFOLDER!\!PTH!\!UUID!\LOCALTEMP\LOCALISATION.XML" /O "%SRC1%!SRCFOLDER!\!PTH!\!UUID!\LOCALTEMP\NAME_ALL.LOCAL"
解决办法
针对JREPL无法识别Unicode符号的问题,可尝试以下几种方案:
确保批处理文件编码为UTF-8带BOM
Windows cmd默认用ANSI解析批处理文件,如果文件是UTF-8不带BOM格式,Unicode符号会被解析错误。将包含该命令的批处理文件保存为UTF-8带BOM格式(如用Notepad++设置编码),让cmd能正确识别Unicode字符。用Unicode转义序列替代符号
把字符串中的Unicode符号替换成Java风格的转义序列,比如™对应\u2122,示例字符串改为Buzz!\u2122 100 Questions Correct T-shirt后再代入变量。JREPL支持解析这类转义序列,能匹配到目标内容。通过/J选项传递Unicode变量
避免直接在命令行参数中传递Unicode字符,改用/J选项从环境变量读取:SET "NAME_STR=Buzz!™ 100 Questions Correct T-shirt" CALL JREPL "(.*)" "$txt=$1" /I /XSEQ /JMATCHQ /INC "'<LANG ID=\qREF\q>'+nameStr+'</LANG>':'</PHRASE>'" /EXC "'</PHRASE>','<LANG ID=\qREF\q>'" /J "var nameStr=env.get('NAME_STR');" /F "%SRC1%!SRCFOLDER!\!PTH!\!UUID!\LOCALTEMP\LOCALISATION.XML" /O "%SRC1%!SRCFOLDER!\!PTH!\!UUID!\LOCALTEMP\NAME_ALL.LOCAL"这种方式绕开cmd命令行的编码限制,让JREPL直接读取正确的Unicode字符串。
强制指定输入文件编码
若LOCALISATION.XML文件不是UTF-8编码,添加/CP 65001参数强制JREPL用UTF-8读取:CALL JREPL "(.*)" "$txt=$1" /I /XSEQ /JMATCHQ /INC "'<LANG ID=\qREF\q>!REFID_NAME_STRING!</LANG>':'</PHRASE>'" /EXC "'</PHRASE>','<LANG ID=\qREF\q>'" /CP 65001 /F "%SRC1%!SRCFOLDER!\!PTH!\!UUID!\LOCALTEMP\LOCALISATION.XML" /O "%SRC1%!SRCFOLDER!\!PTH!\!UUID!\LOCALTEMP\NAME_ALL.LOCAL"
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

