Utf 8 文件名使用utf8

Utf 8 文件名使用utf8,utf-8,batch-file,file-rename,Utf 8,Batch File,File Rename,我有一个名为rename.txt的文本文件,如下所示: 34aa85ff2fb46b29fba2283a7b889480306295.flv|بسوی-زیبایی.flv bb32ca4604217660ab7b6df3938cd0df306294.flv|صدای-تو.flv b4b802c0182ebfd4fbba9c5ad2ab3904306286.flv|بسوی-حق.flv 当我使用批量重命名实用程序将左侧的flv文件重命名为右侧相应的文件时,我得到了: 然后我尝试使用批处

我有一个名为rename.txt的文本文件,如下所示:

34aa85ff2fb46b29fba2283a7b889480306295.flv|بسوی-زیبایی.flv
bb32ca4604217660ab7b6df3938cd0df306294.flv|صدای-تو.flv
b4b802c0182ebfd4fbba9c5ad2ab3904306286.flv|بسوی-حق.flv
当我使用
批量重命名实用程序
左侧的flv文件重命名为右侧相应的文件时,我得到了:

然后我尝试使用批处理文件重命名文件,但cmd中存在相同的问题:

@echo off
for /f "tokens=*" %%a in (rename.txt) do (
  echo %%a
)
pause
cmd输出:

注意:我可以在windows中手动重命名文件:


我怎样才能得到预期的结果呢

Windows不使用UTF-8,而是使用UTF-16LE。对输入文件进行转码。

以下操作对我有效:

@ECHO OFF
CHCP 65001
FOR /F "tokens=1,2 delims=|" %%a IN (rename.txt) DO (
  RENAME "%%a" "%%b"
)
确保文本文件(
rename.txt
)开头不包含UTF-8签名(否则称为BOM),因为/F命令尝试将其视为字符并将其附加到第一个文件的名称。因此,第一个文件不会被重命名(但所有其他文件都会被重命名)

如果您无法删除BOM表,只需在开始处放置一个空行,这样BOM表将保持在该行上,而包含名称的其他行将保持“干净”。如果添加该空行并且不更改上述脚本,则在尝试处理该空行时将产生错误。这应该不是问题,但如果您想消除它,您可以这样做:

@ECHO OFF
CHCP 65001
FOR /F "tokens=1,2 delims=|" %%a IN (rename.txt) DO (
  IF NOT "%%b" == "" RENAME "%%a" "%%b"
)
@ECHO关闭
CHCP 65001
对于(rename.txt)DO中的/F“tokens=1,2 delims=|”%%a(
如果不是“%%b”==”重命名“%%a”“%%b”
)

可能文本文件未被识别为utf8编码的文本。它可能一开始就没有签名吗?在
记事本中打开文件时,名称是否正确显示?@AndriyM是的,它们在带有lucida控制台的notepadchcp 65001中正确显示字体也不起作用rename.txt文件是n UTF-8编码,我不知道缺少什么?请详细说明我如何在php中实现它?UTF-8到UTF-16LE的转换?谢谢。转换后,我得到了一些类似中文的字符,那么utf-16le的代码页是什么?@pouya:在这里,你可以找到
iconv
接受的代码页的名称(如果这是你试图转换的):根据utf-16le的代码页是1200,但我在chcp 1200No之后收到无效的代码页错误,我也不能。我想在cmd中显示Unicode与读取/处理Unicode是一个独立的问题。