找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32235|回复: 7

[文本处理] [已解决]批处理如何按指定字符编码输出文本文件?

[复制链接]
发表于 2016-6-8 12:02:21 | 显示全部楼层 |阅读模式
本帖最后由 xiaoqi_117 于 2016-6-10 16:17 编辑

各位大神,小弟是批处理初学者,现在有个需求要使用批处理生成一个文件,然后将该文件的内容导入一个mysql数据库(UTF-8),导入的动作不能修改,故需要批处理生成的文件为UTF-8格式。Linux下可以使用iconv解决,请大神赐教类似的处理方式。在网上找了2天了,很多都是借助别的程序,由于生产环境下不太方便装别的辅助软件,故希望解决方法的代码全写在一个批处理中。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2016-6-8 13:23:30 | 显示全部楼层
本帖最后由 pcl_test 于 2016-6-8 17:34 编辑
  1. @echo off
  2. more +4 "%~f0">ansi.txt
  3. powershell -c "Get-Content ansi.txt|Out-File -Encoding utf8 utf-8.txt"
  4. pause&exit
  5. 123举个栗子abc
复制代码
 楼主| 发表于 2016-6-10 16:15:21 | 显示全部楼层
版主太厉害了,小弟学习了,万分感谢。
 楼主| 发表于 2016-6-13 09:49:00 | 显示全部楼层
回复 2# pcl_test
版主,如果我用的是win2003系统,没有powershell的话,有没有别的办法?
发表于 2016-6-13 10:20:00 | 显示全部楼层
回复 4# xiaoqi_117


试试VBS
http://bbs.bathome.net/thread-3900-1-1.html
发表于 2025-6-10 10:43:33 | 显示全部楼层
先用 notepad++ 等文本工具将 .bat文件转化成 UTF-8编码文本,再.bat文本内写上 Chcp 65001 >nul 指定生成内容和文件名的中文编码,防止乱码


可以看看这文章 https://www.cnblogs.com/wutou/p/18921696
发表于 2025-6-10 12:21:17 | 显示全部楼层
回复  pcl_test
版主,如果我用的是win2003系统,没有powershell的话,有没有别的办法?
xiaoqi_117 发表于 2016-6-13 09:49



    虽然知道以下的方法不能解决楼主的切身问题。但毕竟曾经遭遇过相似的困扰。借楼主的贴子,权当瞎子提灯笼,利人利己的资料陈列:Windows10(据@Five66 君之言,似乎须1803版本以上方支持)语言区域勾选UTF-8全球语言系统支持。提示重启即可。只是,重启后可能会发生部分原先显示正常的地方无显示及乱码的情况。取消UTF-8全球语言系统支持的选择。再重新勾选UTF-8全球语言系统支持。提示重启原先显示正常的地方无显示及乱码都暂时是没发现什么问题(这个尚待广泛测试)。问题是解决了,只是不晓得是何原理?一直这个闷葫芦没打破,欢迎知道原因的朋友解惑。
发表于 2025-6-10 16:19:11 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-10 16:39 编辑


有限应用条件下也可直接采用纯批方法转换文本文件编码,如  gb2312 ⇄ utf-8
有限应用条件是指》源文件文本行长度不超过 8kb 字符量(汉字算2个字符),源文件非空行数不超过8000行(虽可用分割法救治但以下简版代码略之),文本行不包含 ^<%> 特殊字符以免导致输出有误,源文件有空行会被自动删除(虽可用 findstr 避免但以下简版代码略之)
代码中假设变量名 %gbF% 对应 gb2312 编码文件,%u8F% 对应 utf-8 编码文件

gb2312 编码文件转为 utf-8 编码文件

  1. @echo off &setlocal &set "gbF=gb.txt" &set "u8F=u8.txt"
  2. chcp 936>nul
  3. for /f "delims=" %%a in (%gbF%) do set/a "n+=1" &call set "_#%%n%%=%%a"
  4. chcp 65001>nul
  5. (for /f "tokens=* delims=_#0123456789=" %%v in ('set _#') do echo,%%v)>"%u8F%" <nul
  6. pause &exit/b
复制代码
utf-8 编码文件转为 gb2312 编码文件

  1. @echo off &setlocal &set "gbF=gb.txt" &set "u8F=u8.txt"
  2. chcp 65001>nul
  3. for /f "delims=" %%a in (%u8F%) do set/a "n+=1" &call set "_#%%n%%=%%a"
  4. chcp 936>nul
  5. (for /f "tokens=* delims=_#0123456789=" %%v in ('set _#') do echo,%%v)>"%gbF%" <nul
  6. pause &exit/b
复制代码
备注》借此也给另帖6楼(http://www.bathome.net/thread-70452-1-1.html)作一个补遗...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:46 , Processed in 0.011127 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表