微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以通过安装脚本或批处理来检查文件的编码?

如何解决有没有一种方法可以通过安装脚本或批处理来检查文件的编码?

通过安装脚本/ Windows批处理/ Power Shell是否有办法在传递文件进行转换之前检查文件是否为UTF-8?

作为背景,我目前正在研究使用Visual Studio 2005(升级为Visual Studio 2017)和C ++开发的旧版(日语)Windows软件。

我正在处理使GUI能够显示和输入汉字的要求。因此,决定使用UNICODE进行项目/解决方案编码。

由于该项目最初使用的是Multibyte,为了与UNICODE向后兼容,我决定以UTF-8编码配置文件(ini,dat,保存文件),因为这些文件也被Web应用程序引用。

该软件的主要部分现已完成并且可以使用,最后一个问题是-推出版本升级安装程序。

在此安装程序中(使用Install脚本),我需要将保存文件(以前以SHIFT-JIS编码,因为这些保存文件包含日语文本)更新为UTF-8。

我已经在以下几行中创建了一个批处理文件,该文件将SHIFT-JIS转换为UTF-8,该文件在安装程序的最后部分被调用,并在转换后被删除

@echo off
:Shift_JIS -> UTF-8
setlocal enabledelayedexpansion
for %%f in ("%~dp0\savedfiles\*.sav") do (
    echo %%~ff| findstr /l /e /i ".sav"
      if !ERRORLEVEL! equ 0 (
        powershell -nop -c "&{[IO.File]::WriteallText($args[1],[IO.File]::ReadAllText($args[0],[Text.Encoding]::GetEncoding(932)))}" \"%%~ff"  \"%%~ff" 
      )
)

但是,与此有关的问题是,当用户(1)升级,(2)卸载(故意遗留.sav文件)和(3)重新安装软件时,保存文件会被双重重新编码并导致软件崩溃。 ((1)升级期间更新了UTF-8日语字符,(3)重新安装后变成了垃圾字符。)

解决方法

如果要升级,则所有当前文件都应为Shift-JIS。即使在某些情况下同时保留Shift-JIS和UTF-8文件,您也只需要处理两种类型的编码。因此,可以通过检查文件是否为无效的UTF-8(然后为Shift-JIS)来解决此问题。当然,在极少数情况下,这仍然会导致错误检测,但是对于您的用例来说可能是好的

默认情况下,在读取文本文件时,将使用最适合的后备或替换后备处理程序。我们可以更改为异常备用,因此,如果将Shift-JIS文件打开为UTF-8,它将引发异常。

0

最好遍历文件并在PowerShell中进行转换。如果您确实需要使用批处理文件,则将所有内容包装在* .ps1文件中,然后从批处理中调用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。