你根本不会写作

640?wx_fmt=png

伦敦-摩根士丹利

Photo By Nathan

摘要:好好写作。

这里是「每周分享」的第 22 期。往期分享内容可以在公众号后台的 「不务正业」菜单中找到,Python 类的文章在另一个「不误正业」菜单中。

这一期的话题是:写作
最近为了出 Python 专栏课,重新整理了以前写的文章,发现很多地方写得不好,犯了不少错误。一直以为英语没学好,没想到汉语也给带坏了,说着中式英语,写着英式中文。

上学那阵英语很差,逮住机会就想找老外练口语。有次学校碰到一个老外,他先开口:

Can you speak english?
条件反射地答到:My english is poor.

后面又偶遇了一次,他主动问道:

How are you?
我说:I‘m fine,thank you,and you?

640?wx_fmt=png

就这样好歹算是认识了,口语进步神速,也张口飚英语了,碰到不会的就问他:

How to say this in English?

被他纠正过许多回,便想请他吃个饭略表谢意。找了家学校附近的餐馆,拿给他菜单让他随意点菜,他看了半天指着一处问我这是什么菜:

640?wx_fmt=png

一看,对饭店老板的英语水平顿生敬意,委婉地跟老外说不要在意,这道菜不贵:

The price is very suitable.

嗯,以上是我编的,英语说成这样大概率是交不到老外朋友的,不过,相信像我这种水平的应该还大有人在。在网上看到过个段子,讲几个在国外旅行的中国人恰巧遇到一起车祸,这样向警察描述过程:

one car come, one car go , two cars pengpeng ,the people die.

这些都是一目了然的「中式英语」,想纠正并不难,难的是那些我们并不认为是「中式英语」的地方,比如学校的英文课本、老师出的试卷、学生写的作文。

拿写英语作文来说,以前最喜欢用一些短语或者同学不知道的单词,既高大上又能凑字数,关键老师给分还高。比如:

  • Make great efforts to

  • Make an improvement

  • Pay attention to

  • Try our best to

  • Accelerate the pace of economic reform

  • Overwhelming majority

明明一个词或者更简单的词可以说明,偏要写些在 The Economist 里都几乎见不到的句法。

不久前,看到一本叫《中式英语之鉴》的书,作者是 Joan Pinkham 女士,她为国内官方机构翻译润稿多年,这本书浓缩了她纠正过的「中式英语」精华。

640?wx_fmt=png

豆瓣 8.8 分,五六百页,京东上仅售十几块钱,想必不是很火。如果当年学校能给老师和学生发上一本作为辅导书,想必我的英语水平不至于是现在这个样子。

所幸,大部分人这辈子并不出国,英语使用的场景也不多,所以「中式英语」问题倒也没什么太大影响。然而,多数人地道的英语没学到,却把不地道的英语带到了中文写作中,写出来的都是「英式中文」。

不信,举一些例子,看看你有没有这样写过。

名词主语

习惯说:

  • 流浪汉的爆红,背后有什么秘密?

  • 他的收入的减少改变了他的生活方式。

却不会说:

  • 流浪汉爆红,背后有什么秘密?

  • 他因为收入减少而改变生活方式。

英文常用名词做主语,而中文是常用一件事 (一个短句)做主语 。

万恶的「作出」「进行」「造成」

习惯说:

  • 校友为母校作出了重大贡献。

  • 专家们对该问题已经进行了详细的探讨。

  • 埃塞俄比亚航空公司客机坠毁,造成一百五十七人死亡。

却不会说:

  • 校友对母校贡献很大。

  • 专家们详细探讨了该问题。

  • 埃塞俄比亚航空公司客机坠毁,死了一百五十七人。

「作出」「进行」「造成」这些是弱动词,很多人找不到合适的动词就喜欢用这些代替。这正是英文蹩脚的人的特色,把简单明了的动词分解成「弱动词+抽象名词」的组合。

故作高深的「性」「度」「力」

习惯说:

  • 这本书可读性高么?

  • 他在国内 IT 领域享有很高的知名度。

  • 一个人应该有良好的自控力。

却不会说:

  • 这本书值得看。

  • 他在国内很有名。

  • 一个人应该管好自己。

很多人文章中好用「性」「度」「力」这类抽象名词,说白了就是故作高深,奥威尔将这类词汇称为「语言的义肢」,能砍就砍。

模糊的「之一」

习惯说:

  • 这款 App 是最好用的笔记软件之一。

  • 他是世界上最有钱的人之一。

  • 李白是中国最伟大的诗人之一。

却不会说:

  • 这是一款好用的笔记 App。

  • 他是世界顶级富豪。

  • 李白是中国的大诗人。

「之一」和「One of ..」一脉相承,不确定范围就不要说「之一」,你觉得精确,其实恰恰相反。

画蛇添足的「有关」「关于」「由于」

习惯说:

  • 今天我们讨论有关 Python 的学习方法。

  • 关于他的方案,你看过没有?

  • 由于他近视,所以看不清东西。

却不会说:

  • 今天我们讨论 Python 学习方法。

  • 你看过他的方案没有?

  • 他近视,看不清东西。

英语常用 about、concerning、with regard to 这些词表明逻辑,交代事物因果关系。而多数中文语境自带逻辑关系,不需用这些泛滥的介词

啰嗦的「成功地」

习惯说:我们成功地把该网页数据爬取下来了。

却不会说:我们把网页数据爬取下来了。

爬取下来就是成功,不用再重复,类似这样的副词还有不少。

形容词必用「的」

习惯说:

  • 晴朗的天气。

  • 这篇文章的阅读量是最高的。

  • 我见到一个长得像你兄弟说话也有点像他的陌生男人。

却不会说:

  • 天气晴朗。

  • 这篇文章阅读量最高。

  • 我见到一个陌生男人,长得像你兄弟,说话也有点像他。

很多人碰到形容词就爱用「的」,其实大多数的「的」都可以删掉。另外,英语习惯把所有形容词都放在名词前面,也就是前置。而中文这样用就会显得冗长,其实更适合后置,短小精练,突出重点。

以上这些毛病,你中过招么?

上面的内容参照总结了余光中老先生在 1987 年发表的《论中文的常态与变态》一文。他三十多年前就指出了多数人爱犯的中文写作毛病,今天仍然那么多人没有注意到。

到底是我们没有学好,还是没有学过?

网上有很多所谓的爆款写作课,教你怎么写出十万+ 文章,我倒觉得,老师的心思都放在运营技巧上了,哪里还会教你写作。

想好好学写作,不妨看看余老的《翻译乃大道》,让你知道什么是中文。

最后,缅怀敬爱的余光中先生,他的《乡愁》至今仍记忆犹新。

640?wx_fmt=png

<think>我们正在处理一个关于Qt中字符串转义的问题。用户希望在使用`ui->textEdit_Senddata->toPlainText()`获取文本时,避免字符串中的反斜杠`'\'`被转义为`'\\'`。首先,我们需要理解Qt中字符串的处理机制。在C++和Qt中,字符串字面量中的反斜杠是转义字符。例如,在代码中写`"\\"`表示一个反斜杠字符。但是,当用户在实际的文本编辑控件中输入一个反斜杠时,它应该被当作一个单独的字符,而不是转义序列。然而,用户观察到当使用`toPlainText()`获取文本时,反斜杠被转义了(即变成了两个反斜杠)。这实际上可能是一个误解。让我们分析:1.**Qt中的文本获取**:`QTextEdit::toPlainText()`返回一个`QString`,其中包含用户输入的文本。在Qt中,`QString`内部存储的是Unicode字符,不会对反斜杠进行额外的转义。也就是说,如果用户在文本框中输入一个反斜杠,那么`toPlainText()`返回的字符串中就应该是一个反斜杠字符(Unicode值92)。2.**调试输出时的显示问题**:当使用`qDebug()`输出这个字符串时,为了显示方便,Qt会在调试输出中对特殊字符(包括反斜杠)进行转义。所以,如果你在调试输出中看到两个反斜杠,那是因为`qDebug()`将其转义显示了,而实际上字符串中只有一个反斜杠。3.**字符串的实际内容**:要验证字符串的实际内容,可以检查字符串的长度,或者将字符串中的每个字符打印出来(例如,使用`qDebug()<<character.unicode()`)。因此,用户可能遇到的问题是在调试输出时看到的转义表示,而不是字符串本身被转义。但是,如果用户确实需要将字符串用于某些需要原样输出反斜杠的场景(例如,构造一个正则表达式字符串,或者写入文件),那么应该注意:-在Qt中,当需要将字符串作为正则表达式时,可以使用`QRegExp`或`QRegularExpression`,并且要注意正则表达式引擎也会解释反斜杠。因此,可能需要两个级别的转义:首先在字符串中,然后在正则表达式中。但是,这取决于如何使用这个字符串。根据用户提供的引用:-引用[1]提到匹配反斜杠的问题,在正则表达式中需要两个反斜杠(字符串中表示为四个反斜杠)来匹配一个实际的反斜杠。但这与`toPlainText()`无关,而是正则表达式本身的要求。-引用[2]和[3]涉及路径中的斜杠处理,建议使用`QDir::toNativeSeparators()`来处理路径分隔符,但这与转义无关。所以,针对用户的问题,我们应当澄清:`toPlainText()`不会将单个反斜杠转义为两个。如果用户看到两个反斜杠,那可能是因为在输出(如调试输出)时被转义显示了。**解决方案**:1.如果用户只是想在调试输出中看到单个反斜杠,那么可以不用处理,因为实际字符串中只有一个反斜杠。如果确实需要以非转义形式显示,可以将字符串写入文件或使用其他方式查看。2.如果用户需要将字符串用于正则表达式,那么需要根据正则表达式的规则对字符串进行转义(例如,使用`QString::replace`将`"\"`替换为`"\\\\"`),但这通常是因为正则表达式引擎的要求,而不是因为`toPlainText()`的问题。3.如果用户需要将字符串保存到文件或传输,而希望保持原样,那么直接使用即可,因为字符串在内存中是正确存储的。**示例代码**:假设用户在文本框中输入了:`C:\Windows\System32`,那么:```cppQStringtext=ui->textEdit_Senddata->toPlainText();//实际字符串是"C:\Windows\System32",其中每个反斜杠都是一个字符//但是用qDebug()输出时,会显示为"C:\\Windows\\System32"qDebug()<<text;//显示为转义形式//为了验证实际字符,我们可以打印每个字符的Unicode值for(inti=0;i<text.length();++i){qDebug()<<text.at(i).unicode();//对于反斜杠,会输出92}//如果用户需要将这个字符串用于正则表达式,那么需要额外转义QStringpattern=text;pattern.replace("\\","\\\\");//将每个反斜杠替换成两个反斜杠(字符串中表示为"\\\\",实际会变成两个字符:第一个是'\',第二个也是'\',但组合在一起在正则中表示一个字面反斜杠)```**结论**:在Qt中,`toPlainText()`返回的字符串不会自动将单个反斜杠转义为两个反斜杠。用户观察到的现象可能是由于调试输出的转义显示造成的。如果用户需要将字符串用于正则表达式,则需要进行额外的转义处理。**相关问题**:1.在Qt中,如何正确显示包含反斜杠的字符串?2.在Qt中,如何将字符串中的反斜杠替换为双反斜杠?3.在Qt中,如何处理正则表达式中的特殊字符?</think>### 解决 Qt 中反斜杠转义问题 在 Qt 中使用 `toPlainText()` 获取文本时,**字符串中的反斜杠 `\` 不会被自动转义**。您观察到的转义现象通常发生在以下场景: 1. **调试输出时**:`qDebug()` 自动转义特殊字符 2. **字符串赋值时**:C++ 编译器处理字符串字面量 3. **正则表达式处理**:正则引擎需要额外转义 --- ### 解决方案与验证方法 #### 1. 直接验证原始内容 ```cpp QString rawText = ui->textEdit_Senddata->toPlainText(); // 方法1:检查字符串长度(反斜杠只占1个字符长度) qDebug() << "String length:" << rawText.length(); // 方法2:逐字符输出Unicode值 for(int i = 0; i < rawText.length(); ++i) { qDebug() << "Char" << i << ":" << rawText.at(i).unicode(); } ``` 当输入 `\` 时,输出应为: ``` String length: 1 Char 0: 92 // Unicode 92 = '\' ``` #### 2. 处理特殊场景 **场景:需要作为正则表达式** ```cpp QString pattern = QRegExp::escape(rawText); // 自动添加必要转义 QRegExp rx(pattern); ``` **场景:需要文件路径处理** ```cpp // 转换为本地路径格式(Windows 转为 \,Linux 保持 /) QString path = QDir::toNativeSeparators(rawText); ``` #### 3. 常见误解澄清 | 场景 | 实际内容 | 显示效果 | 原因 | |------|----------|----------|------| | `qDebug() << "\\"` | 1个`\` | `"\\"` | `qDebug`自动转义 | | `QString s = "\\"` | 1个`\` | - | 编译器转义 | | `rx.exactMatch("\\")` | 匹配1个`\` | 需写`"\\\\"` | 正则引擎要求 | --- ### 关键结论 1. `toPlainText()` **不会修改**原始输入内容,反斜杠始终作为单个字符存储 2. 转义现象仅发生在**显示/序列化**环节,内存中保持原样 3. 需要匹配单个反斜杠的正则表达式应写作 `"\\\\"`(参考引用[1])[^1] 4. 文件路径建议统一使用 `/` 分隔符,兼容跨平台(参考引用[2])[^2] > **验证建议**:通过字符串长度检查或二进制数据查看器确认实际内存内容,避免被调试输出误导(参考引用[3]关于INI文件读取的案例)[^3]。 --- ### 最终解决方案代码 ```cpp // 获取原始文本(内存中反斜杠保持单字符) QString original = ui->textEdit_Senddata->toPlainText(); // 需要写入文件/网络传输时直接使用 QFile file("output.txt"); file.write(original.toUtf8()); // 需要显示时转为可见格式(可选) QString displayText = original.toHtmlEscaped(); ui->label->setText(displayText); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值