java - javaw 命令不支持特殊字符
问题描述
我创建了一个在 Windows 启动时运行的 bat 文件,并启动了我的 jar 文件
start javaw -jar "C:/Users/No%c3%a9/Desktop/Workspace/DTK_LTOM/out/artifacts/DTK_LTOM_jar/DTK_LTOM.jar"
(看,这里它用 %c3%a9 替换了“é”,当我自己替换“é”时,它仍然用奇怪的符号替换它)
但是我遇到了一个问题:当我启动它时,什么也没有发生。所以我试着写“java”而不是“javaw”来看看问题出在哪里。我有一个包含“é”字符的法语名字,这似乎是问题所在,因为它显示了一个错误对话框窗口,并且“é”被一些奇怪的字符替换。然后我的问题是:如何使 bat 文件或 jar 文件能够使用特殊字符。
public class Listener {
JDA jda;
String roaming = System.getenv("APPDATA");
public Listener() {
//jda = Grabber.getInstance().getJda();
String path = roaming + "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\";
File fi = new File(path + "javalaunchauto.bat");
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(fi));
writer.write("start javaw -jar " + Grabber.class.getProtectionDomain().getCodeSource().getLocation().getPath().substring(1));
writer.close();
} catch (IOException e) { e.printStackTrace(); }
JFrame frame = new JFrame(); //here just to see when the jar is opened
frame.setVisible(true);
}
public static void main(String[] args) {
new Listener();
}
}
我发现了一些有用的东西:使用该class.getProtectionDomain().getCodeSource().getLocation().getPath()
方法是有风险的,如果你在那之后不解码它。我确实URLDecoder.decode(str,"UTF-8")
用 str 解码它作为我的 jar 文件的路径class.getProtectionDomain().getCodeSource().getLocation().getPath()
。我以为它会起作用,但实际上它确实在批处理文件中添加了“é”,但打开它时仍然显示错误。( Error: Unable to access jarfile C:/Users/NoÚ(instead of Noé)/Desktop/etc.
)
解决方案
感谢 Compo,我探索了这个chcp
命令。事实上,可以更改批处理文件中可以包含的不同字符的数量。你只需要精确chcp
的字符数。
chcp 1252
似乎有效,因为它指的是拉丁字母和中文字母(我认为)。
无论如何,由于它是在命令提示符中工作的命令,您可以将其写入批处理文件。
这是之前/之后:
前:
start javaw -jar C:/Users/Noé/Desktop/Workspace/DTK_LTOM/out/artifacts/DTK_LTOM_jar/DTK_LTOM.jar
后:
chcp 1252
start javaw -jar C:/Users/Noé/Desktop/Workspace/DTK_LTOM/out/artifacts/DTK_LTOM_jar/DTK_LTOM.jar
感谢 Compo,我希望它对某些人有所帮助。
推荐阅读
- javascript - 是否有 ramda 函数可以帮助您将日志记录添加到管道/组合?
- python-3.x - 批量导入图片
- sql - SQL 中必须转义哪些正则表达式字符?
- c# - c# - 尝试从 WSDL 构建 Web 服务客户端,但未提供配置文件
- r - 使用`qqnorm`时如何注释QQ图上的所有点?
- javascript - 在 Chrome DevTools 扩展中,如何从扩展元素侧边栏窗格的多框架页面中检索选定的节点
- javascript - 尝试使文本居中时动画消失
- tensorflow - 张量流中的自定义窗口运算符
- excel - Excel VBA函数隐藏/取消隐藏行
- angularjs - 尽管在浏览器中运行相同的代码,Jamsine 仍会引发错误