【问题标题】:How can I use accented characters in the echo command in Batch?如何在批处理的 echo 命令中使用重音字符?
【发布时间】:2015-11-15 18:33:57
【问题描述】:

你好 Stack Overflow 的人们。我和我的朋友正在使用 Batch/.bat 编程语言制作游戏。到目前为止,我们还没有遇到无法解决的问题。然而,当我开始将其翻译成西班牙语版本时,我们遇到了问题。当我试图让程序用带有口音的西班牙语“回声”单词(例如Á,É)时,它不起作用。我已经设置了一个测试页面,其中包含程序 echo "áéíóú" 但它出现了其他内容,我现在无法复制和粘贴它。我在测试俄语/西里尔语键盘时遇到了类似的问题。我在测试口音时将字符集设置为 437,在测试俄语时将字符集设置为 1251。当我保存它时,蝙蝠文件代码中的特殊字符甚至发生了变化。为了使特殊字符出现,我需要做些什么特别的事情吗?同样,我只是想在 echo 命令上使用它们。

【问题讨论】:

    标签: windows batch-file special-characters


    【解决方案1】:
    • 将批处理文件保存为 UTF-8不带 BOM 签名并使用 UTF-8 代码页:

      chcp 65001 >nul
      echo Päivää Привет Hello
      
    • 或者为每种语言创建一个包含消息的文件,然后将其保存为 unicode 编码 (UTF-16LE)

      en.hello=Hello
      .......other messages
      fi.hello=Päivää
      .......other messages
      

      然后加载翻译:

      set LANGUAGE=fi
      ...............
      for /f "tokens=1* delims=." %%a in ('type "%~dp0messages.txt') do (
          if "%%a"=="%LANGUAGE%" set "msg.%%b"
      )
      ...............
      echo %msg.hello%
      

      现在默认情况下应该正确显示消息,因为系统控制台代码页通常对应于区域设置中设置的语言。

      Päivää

      您可以将这些消息以可读形式保存在保存为 UTF-8 的批处理文件中没有 BOM 签名,并使用嵌入式 VBScript/powershell 代码以 UTF16-LE 编码提取到 messages.txt

      ::msg.en.hello=Hello
      ::msg.fi.hello=Päivää
      powershell -c "Get-Content '%~f0' -encoding UTF8 | Select-String -Pattern '^::msg\.' | ForEach-Object {$_ -replace '::msg.',''} | Set-Content '%temp%\messages.txt' -encoding Unicode"
      

      然后如上图加载。

    【讨论】:

    • 当我做chcp 65001 的事情时,它正确地显示了线条。非常感谢。这一直困扰着我。
    【解决方案2】:

    在批处理文件中使用

    SETLOCAL EnableDelayedExpansion

    @CHCP 65001 >NUL

    【讨论】:

    • 这与 2015 年的答案有什么不同吗?
    猜你喜欢
    • 2017-11-19
    • 2020-10-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多