草庐IT

windows - find.exe 有问题?

在C++中,我们有一种在文件中搜索文本的方法。它通过将文件读取到变量并使用strstr来工作。但是当文件变得非常大时,我们遇到了麻烦。我想我可以通过使用_popen调用find.exe来解决这个问题。它可以找到,除非这些条件都为真:文件类型为unicode(BOM=FFFE)文件刚好是4096字节您要搜索的文本是文件中的最后一个文本要重新创建,您可以这样做:打开记事本插入2046个X,然后在末尾插入一个A另存为test.txt,encoding="unicode"验证文件正好是4096字节打开命令提示符并键入:find"A"/ctest2.txt->Nohits我也试过这个:添加或删除

c++ - 我怎样才能使 Unicode iostream i/o 在 Windows 和 Unix 环境下都能工作?

注意:这是一个question-with-answer为了记录其他人可能会觉得有用的技术,并可能了解其他人的更好解决方案。请随时添加评论或问题作为评论。也请随时添加其他答案。:)问题#1:通过流对Unicode的控制台支持在WindowsAPI级别受到严格限制。可用于普通桌面应用程序的唯一相关代码页是65001,UTF-8。然后交互式输入在API级别失败,甚至非ASCII字符的输出也会失败——C++标准库实现不提供解决此问题的方法。#include#includeusingnamespacestd;automain()->int{wstringusername;wcoutH:\pers

java - Windows 控制台中的 unicode 字符比预期的多

我想在Windows控制台中打印俄语和德语字符。所以我写了一个小测试程序来了解它的工作情况:PrintStreamps=newPrintStream(System.out,false,"UTF-8");ps.println("öäüßгджщ");然后我启动cmd.exe,把它的字体改成支持Unicode的LucidaConsole,把codepage改成Unicode"chcp65001",然后执行我的程序。德文和俄文字符已打印,但文字比我预期的多一点(红色下划线):但是文本在Eclipse控制台中打印正确。有没有办法在Windows控制台中正确打印它?我使用Windows7。我刚刚

windows - Windows : how to read Unicode input from console? 上的 GHCi

如何使以下代码在命令提示符/LameShell中使用Unicode(CJK)?main=getLine>>=putStrLn(Windows8.1,Haskell平台2014)不,chcp65001不起作用,chcp10000也不起作用。不,我不想将系统本地(控制面板/时钟、语言和区域/语言/更改日期、时间或数字格式/管理)从英语(美国)更改为其他语言。是的,我已经将字体设置为LucidaConsole。我试过ConEmu/Cmder/Console2,他们都说“Exception::hGetLine:endoffile”。我也尝试过Emacs,(我使用Vim),它没有崩溃,但无论我输

Windows 批处理 : Unicode parameters for (robo) copy command

我需要在一个批处理文件中复制多个文件。这些文件具有映射到不同代码页的Unicode名称。示例:setArabicFile=ڊڌڵڲڛشسsetCyrillicFile=щЖЛдЉиsetGermanFile=Büchercopy%ArabicFile%SomePlaceElsecopy%CyrillicFile%SomePlaceElsecopy%GermanFile%SomePlaceElse问题:批处理文件不能是Unicode。问题:如何将Unicode文件名写入批处理文件以便复制命令识别它们?注意事项:我不关心文件名如何显示。实际上批处理文件不仅仅是复制这些文件,我只是简化了描述

c++ - UNICODE、UTF-8 和 Windows 困惑

我正在尝试在Windows中实现文本支持,并打算稍后迁移到Linux平台。以统一的方式支持国际语言是最理想的,但考虑到所讨论的两个平台,这似乎并不容易实现。我花了相当多的时间阅读UNICODE、UTF-8(和其他编码)、widechars等,这是我到目前为止所了解的内容:作为标准,UNICODE描述了可映射的字符集及其出现的顺序。我将其称为“什么”:UNICODE指定什么可用。UTF-8(和其他编码)指定如何:每个字符如何以二进制格式表示。现在,在windows上,他们本来选择了UCS-2编码,但是不能满足要求,所以他们有UTF-16,必要时也是多字符。所以这里是困境:Windows内

c++ - Windows 上的 std::basic_string<TCHAR> 会优于 std::wstring 吗?

据我了解,Windows#definesTCHAR是基于构建的应用程序的正确字符类型-所以它是wchar_t在UNICODE构建和char否则。因此我想知道是否std::basic_string会比std::wstring更可取,因为第一个理论上会匹配应用程序的字符类型,而第二个总是很宽。所以我的问题本质上是:会std::basic_string优于std::wstring在Windows上?而且,使用std::basic_string会有什么注意事项(即意外行为或副作用)吗??或者,我应该只使用std::wstring在Windows上而忘记它? 最佳答案

c++ - 需要说明将路径转换为长 Unicode 路径或以\\?\开头的路径

首先,让我问一个修辞问题--微软,为什么让我们在路径前添加\\?\以允许它们的长度为32,767个字符?为什么不按原样使用它们并扩展API上的内部缓冲区的大小?对不起,我只是发泄我的不满......好的,现在我的实际问题是,如果我有一个路径,我如何将它转换为接受32,767个字符长度的格式?请注意,我对该路径一无所知——它可以是相对路径、绝对本地路径、网络共享等。换句话说,它可以是Microsoft发明的众多路径格式中的任何一种。乍一看,在开头添加\\?\似乎是一个简单的提议,对吧?那么,如果该路径已经转换为扩展格式怎么办?我试过readingthis从该页面的大小和底部的评论数量,您

windows - 键盘 Hook 中的 ToAscii/ToUnicode 会破坏死键

似乎如果您在全局WH_KEYBOARD_LLHook中调用ToAscii()或ToUnicode(),并且按下死键,它将被“销毁”'.例如,假设您在Windows中将输入语言配置为西类牙语,并且您想要在程序中键入带重音符号的字母á。通常,您会按单引号键(死键),然后按字母“a”,然后屏幕上会按预期显示带重音符号的á。但是,如果您在低级键盘Hook函数中调用ToAscii()或ToUnicode(),这将不起作用。似乎死键被破坏了,所以屏幕上没有显示重音字母á。删除对上述函数的调用可以解决问题...但不幸的是,我需要能够调用这些函数。Google了一会儿,似乎很多人都有这个问题,但没有提

windows - Win32 CreateProcess : When is CREATE_UNICODE_ENVIRONMENT *really* needed?

CreateProcess文档说明(我大胆强调):lpEnvironment[in,optional][...]IftheenvironmentblockpointedtobylpEnvironmentcontainsUnicodecharacters,besurethatdwCreationFlagsincludesCREATE_UNICODE_ENVIRONMENT.IfthisparameterisNULLandtheenvironmentblockoftheparentprocesscontainsUnicodecharacters,youmustalsoensurethatd