隐藏英雄 发表于 2023-2-4 18:37

QT 如何向TXT写入 ANSI格式字符串

我想把下面这句代码以 ANSI格式 写入d:\1.txt 内改怎么写呢 请大佬帮忙完整方法
if exist "" "C:\Program Files (x86)\3.exe" start "" "C:\Program Files (x86)\3.exe" 2>nul

MarioCrane 发表于 2023-2-5 01:40

本帖最后由 MarioCrane 于 2023-2-5 01:41 编辑

隐藏英雄 发表于 2023-2-5 01:22
大佬 用你的方法我成功的将字符串写进了txt文本,但是新的问题更复杂了,路径中存在中文的话 批处理会乱 ...
可以使用QString的转换功能,QString::toLocal8Bit()

    QFile file{ "C:/测试/test.bat" };
    if (file.open(QIODevice::WriteOnly)) {
      file.write(QString{ R"(ren "C:\测试\a.exe" b.exe 2>nul)" }.toLocal8Bit());
      file.flush();
      file.close();
    }

btc001 发表于 2023-2-4 19:33

if exist \"\" \"C:\\Program Files (x86)\\3.exe\" start\ "\"\"C:\\Program Files (x86)\\3.exe\" 2>nul

字符串转义就可以了啊

xouou 发表于 2023-2-4 20:36

   QTextStream out(&file);
   out.setCodec("utf-8");
可以指定字符集编码

但是楼主说的ANSI格式, 他并不是一种编码, 而是一种字符显示模式,在不同的电脑中, 调用的字符集是不同的;

qt支持和的字符集编码如下
The supported encodings are:
Big5
Big5-HKSCS
CP949
EUC-JP
EUC-KR
GB18030
HP-ROMAN8
IBM 850
IBM 866
IBM 874
ISO 2022-JP
ISO 8859-1 to 10
ISO 8859-13 to 16
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
KOI8-R
KOI8-U
Macintosh
Shift-JIS
TIS-620
TSCII
UTF-8
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
Windows-1250 to 1258

隐藏英雄 发表于 2023-2-4 20:49

本帖最后由 隐藏英雄 于 2023-2-4 20:51 编辑

xouou 发表于 2023-2-4 20:36
QTextStream out(&file);
   out.setCodec("utf-8");
可以指定字符集编码

大佬你好,那要是如果我在QT中要将

H:/QT/test/build-test-Desktop_Qt_6_2_4_MinGW_64_bit-Debug/debug/test.exe   
上面这样的路径变量,在写入txt后变为下面的这样的路径什么样的办法能很好的实现
H:\QT\test\build-test-Desktop_Qt_6_2_4_MinGW_64_bit-Debug\debug\test.exe

hxs1 发表于 2023-2-4 22:38

学习下,

冥界3大法王 发表于 2023-2-5 00:04

人家举例说的是批处理
可要的是QT的实现{:301_998:}
楼上几位合适吗?

MarioCrane 发表于 2023-2-5 00:22

本帖最后由 MarioCrane 于 2023-2-5 00:26 编辑

隐藏英雄 发表于 2023-2-4 20:49
大佬你好,那要是如果我在QT中要将

H:/QT/test/build-test-Desktop_Qt_6_2_4_M ...
52的回复有bug,看我最新的回帖吧

MarioCrane 发表于 2023-2-5 00:25

正常写入没有问题QFile file{ "config.txt" };
if (file.open(QIODevice::WriteOnly)) {
    file.write("H:/QT/test/build-test-Desktop_Qt_6_2_4_MinGW_64_bit-Debug/debug/test.exe");
    file.flush();
    file.close();
}

不过根据你的现象,我猜测你使用到了QDir来获取的路径。QDir存在一个斜杠与反斜杠的转换操作。
// 斜杠转反斜杠/ to \
// input C:/config.text
// output C:\\config.text
auto a = QDir::toNativeSeparators(path);

// 反斜杠转换斜杠\ to /
// input C:\\config.text
// output C:/config.text
auto a = QDir::fromNativeSeparators(path);

隐藏英雄 发表于 2023-2-5 01:22

本帖最后由 隐藏英雄 于 2023-2-5 01:33 编辑

MarioCrane 发表于 2023-2-5 00:25
正常写入没有问题
大佬 用你的方法我成功的将字符串写进了txt文本,但是新的问题更复杂了,路径中存在中文的话 批处理会乱码 导致执行失败
我有下面这样一个变量 里面存的是一个路径   
QString renname = QString("ren %1 %2 2>nul \n") .arg(WorkToolname) .arg(NowFilename);
写入txt后是这样的路径
ren "D:\Documents\测试文件夹\main.exe" test.exe 2>nul
但是这样写入中文路径 的批处理是不能正确执行的,需要将renname这个变量中的字符串转换为GB2321的编码格式要怎么写才可以呢?
执行后是这样的


隐藏英雄 发表于 2023-2-5 01:26

冥界3大法王 发表于 2023-2-5 00:04
人家举例说的是批处理
可要的是QT的实现
楼上几位合适吗?

法王大佬,求指点QT怎么写一个能执行中文路径的 bat
页: [1] 2
查看完整版本: QT 如何向TXT写入 ANSI格式字符串