我想确认我对原始字符串文字的理解和Windows上的(非宽)execution character set. 我希望特定确认的相关段落是粗体的.,但首先是一些背景. 背景 (相关问题在以下 BOLD 中的段落中) 由于@theundeadeadfish的答案 我怀疑有些人可能会考虑浪费时间,甚至为了理解MSVC中非ASCII字符的ANSI相关行为(即非宽)字符串. 例如,请考虑@iinspectable的评论: 您不能在A的ANSI版本的ANSI版本上扔一个UTF-8编码字符串 Windows API,希望发生任何理智的事情. 请注意,在我当前的I18N项目中,在基于Windows MFC的应用程序上,我将emove emove api call的所有呼叫(即ANSI)版本,我希望我生成 execution wide-character set 字符串的编译器,不是 execution character set(非整个)字符串. 但是,我
以下是关于 codepages 的编程技术问答
当前它默认为我的系统语言环境,在我的情况下为932(日语shift-jis),但我希望它为65001(UTF-8). 我可以通过插入代码中某个地方的setConsoleoutputcp行来更改给定程序的默认值,然后将其删除,但是为每个程序进行操作都很烦人. 有什么建议? 解决方案 这可以通过标准方法来完成:通过撰写可执行器的注册表设置.我的模板dbg_console.reg: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Console\] "ScreenBufferSize"=dword:1388012c "WindowSize"=dword:00340096 "FontSize"=dword:00100000 "FontFamily"=dword:00000036 "FontWeight"=dword:00000190 "FaceNam
我希望创建一个批处理文件/宏来删除自动生成的UTF-8 CSV的第一行,并将其转换为Windows Code Page Page 1251(" ANSI"). 我一直在互联网上寻找很多事情,但是找不到有效的东西... 删除第一行很简单 @echo off set "csv=test.csv" more +1 "%csv%" >"%csv%.new" move /y "%csv%.new" "export\%csv%" >nul 之后我迷路了,我尝试使用DOS的类型 cmd /a /c TYPE test.csv > ansi.csv 以及对此的许多变体,但它要么返回一个空的CP1251文件或另一个UTF文件. 我尝试使用VBS,但这返回了另一个UTF-8文件,但现在没有BOM Option Explicit Private Const adReadAll = -1 Private Const adSaveCreateOverWrite = 2 Pr
好吧,我试图读取带有重音(法语)的JSON格式化文本文件,根据W8,使用C ++(Visual Studio 2012 Express). 这是文件: {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]} 一行,编码在UTF-8(无BOM)中,保存为d:/p.txt 这是C ++中的阅读代码: std::ifstream in("D:/p.txt", std::ios::binary | std::ios::in); std::string content( (std::istreambuf_iterator(in) ), (std::istreambuf_iterator() ) ); 我得到的输出: {"products": [{"id": 125, "label": "Bill├®l"}
用"模式con con select = 65001"切换到UTF8代码时,批处理处理接缝以停止工作而无需任何错误消息. 因此,在刚启动的控制台中执行" cmd.exe/c test.bat",而codepage 437或850处于活动状态. 执行"模式con CP SELECT = 65001"工作正常. UTF-8字符的显示功能正常. 执行" Echo Hallo!"之类的东西.工作正常. 但是执行" cmd.exe/c test.bat"停止工作,没有显示错误消息. 这不仅是显示错误:批处理文件未被执行. 切换到任何"旧"字符集可以使其再次正常工作. 切换到UTF8字符集可以让它再次停止工作. 当然,从UTF8弃权是一种解决方案 - 但背景中的副作用不良. 解决方案 我不知道如何在更改为65001之后如何启动批处理文件. 即使将批处理文件保存在UTF16-LE或UTF16-BE中,也不会启动. 但是您可以运行批处理文件并更改内部的代码e
我的问题是关于用急性打印法语字符:é è à ô etc.用斑马p4t打印机. 考虑以下ZPL说明: ^XA ^FO20,20 ^CI28 ^A0,20,20 ^FD Amitié ^FS ^XZ 我将这些说明放入编码为UTF-8的文件中. 当我将此文件发送到Zebra GK420T打印机时,我会在法语单词Amitié的末尾获得有关字符的预期结果,您可以在上面看到.它被正确打印. 现在,当我将此非常相同的文件发送到斑马p4t打印机时,它会打印出|-®而不是é字符. 打印机的固件是SHCPT11Z48. alos,如果您考虑下面的zpl说明: ^XA ^FO20,60 ^A0,20,20 ^FD Amitié ^FS ^XZ 我将这些说明放入编码为ANSI的文件中. 现在,当我将此非常相同的文件发送到斑马p4t打印机时,它会打印Ú而不是é字符. 我真的看不到这个字符Ú来自哪里. 我该怎么办来解决这个问题? 打印机中缺少字体
我是.NET开发人员,并被要求执行一个将HTML文件转换为C#中ANSI的应用程序. ANSI是必要的,因为转换后的文件将在Visual Fox Pro应用程序上运行. 基本逻辑已经准备就绪,问题本身就是在转换本身. 我已经尝试过此代码:http://social.msdn.microsoft.com/Forums/pt-BR/026ddda3-9bd1-4502-b445-e2a1cc88345d/convert-file-from-utf8 -to-ansi?forum = csharplanguage 但是,当我在EditPlus上检查它时,文件仍未转换为ANSI,甚至更糟糕的是,它都弄乱了. 我应该做的是转换一个像EditPlus一样的文件,它保留了文档缩进,并且可以将任何文件从UTF8转换为ANSI. 重点是我正在使用数百个HTML文件,所以我不能使用文本编辑器一个一个一个一个. 如何进行转换? 有没有办法将其转换并保留像EditPlu
我已经在几个stackoverflow答案中读到,有些字符从CP1252(又称Windows-1252;它们是一样的,不是吗,不是吗?) -8,例如这里: https://stackoverflow.com/a/a/a/23399926/2018047 有人可以为此提供更多的启示吗?这是否意味着,如果我批处理/质量将源代码从CP1252转换为UTF-8,我将获得一些最终作为垃圾的字符? 解决方案 这就是Windows 1252 CodePage的样子. P> 您可以看到,字节0x81,0x8d,0x8f,0x90,0x9d没有分配给它们的任何东西. 如果您的输入文件包含这些字节,并且您将其视为在Windows 1252编码中,则这些字节将被视为无效字符.在正常情况下,这意味着输入文件不在Windows 1252中. 所有其他字节编码可打印字符或控制字符,所有这些字符均以unicode存在,因此可以在UTF-8中明确编码. 我不知道链接的答案试图要求什么,
我开始使用Inno设置,并且我的INI文件编码有一些问题. 我想将用户输入保存在INI文件中,并且此输入可以包含口音. 我使用Inno Setup Unicode,我的setupScript.iss是UTF-8编码,这是我的代码(零件): [INI] Filename: "{app}\www\conf\config.ini"; Section: "Settings"; Key: "ca.plafondAnnuel"; String: "{code:GetUser|Plafond}" Filename: "{app}\www\conf\config.ini"; Section: "Settings"; Key: "app.siren"; String: "{code:GetUser|Siren}" Filename: "{app}\www\conf\config.ini"; Section: "Settings"; Key: "app.adresse"; String: "{
我尝试使用仅包含ANSI版本的Windows ANSI API的dll库绘制文本,但是我需要使用UTF-8存储字符串数据.我不想使用多级/宽大函数转换字符串,因此我想要一种方法来更改应用程序中的CP_ACP,以便可以将字符串数据输入ANSI API.谢谢. ps:我不想更改系统默认编码. 解决方案 CP_ACP表示系统ANSI CodePage.您不能以每个程序或人均基础进行更改.这是一个系统范围的设置.如果DLL确实取决于CP_ACP内部,那么您别无选择,只能在与DLL互动时从/转换为UTF-8. 其他解决方案 从Windows 10 V1903开始,您可以使用应用程序清单为给定过程设置活动代码页,这可能与系统范围的代码页面不同:
我的代码看起来像: # -*- coding: utf-8 -*- print ["asdf", "中文"] print ["中文"] print "中文" 日食控制台中的输出非常奇怪: ['asdf', '\xe4\xb8\xad\xe6\x96\x87'] ['\xe4\xb8\xad\xe6\x96\x87'] 中文 我的第一个问题是:为什么最后一行获得正确的输出,而其他产品则没有? 我的第二个问题是:如何纠正错误的问题(使它们输出真实字符,而不是以" x"开头的代码)? 谢谢你们! 解决方案 为什么最后一行获得正确的输出,而其他产品则没有? 当您print foo时,被打印出来的是str(foo). 但是,如果foo是list,str(foo)为每个元素bar使用repr(bar),而不是str(bar). 字符串的str是字符串本身;字符串的repr是引号内的字符串,逃脱了. 我如何纠正错误的 如果要在
Windows (不支持UTF-7和UTF-8除外) 好吧,不支持UTF-7很有意义:字符具有非唯一表示形式,并且引入了复杂性和安全风险. 但是为什么不UTF-8? 我理解,Windows API函数的" ANSI"版本将其参数转换为UTF-16,调用等效的" W"函数,然后将输出中的任何字符串转换为" ANSI".这就是我一直在手动做的事情.那么为什么Windows不能为我做呢? 解决方案 " ANSI"代码页基本上是遗产:Windows 9X时代.无论如何,所有现代软件都应基于Unicode(即UTF-16). 基本上,当ANSI代码页面最初设计时,UTF-8甚至没有发明,因此对多字节编码的支持相当偶然(即,大多数ANSI代码页面都是单字节,除了某些East East亚洲代码页是单一或两个字节).在UTF-16中应进行所有新开发时,增加对"适当"多字节编码的支持可能不值得付出的努力. 其他解决方案 _setmbcp()是VC ++ RTL功能
我有一个ANSI编码的文本文件,该文件不应作为ANSI编码为ANSI ANSI不支持的字符.我宁愿与UTF-8一起工作. 数据可以正确解码,还是在转编码中丢失? 我可以使用什么工具? 这是我拥有的样本: ç é 我可以从上下文(Cafâ©应该是咖啡馆)看出这两个字符: ç é 解决方案 编辑:在进入更复杂的解决方案之前消除的一种简单可能性:您是否尝试将字符设置为读取文件的文本编辑器中的UTF8?这可能只是某人向您发送您正在阅读的UTF8文件的情况,该文件在编辑器设置中说CP1252. 仅以这两个示例,这是通过单字节编码的镜头读取UTF8的情况,这可能是ISO-8859-1,ISO-8859-15或CP1252.如果您可以发布其他问题字符的示例,则应该有可能缩小更多. 由于对字符的视觉检查可能会产生误导,因此您还需要查看基础字节:您在屏幕上看到的§可能是0xa7或0xc2a7,这将确定您拥有的字符集转换的种类做. 您可以假设所有
我正在尝试整理一个将几个Excel文件转换为PDF文件的脚本. $path = Read-Host -Prompt 'Input Directory Path and Press Enter' $xlFixedFormat = “Microsoft.Office.Interop.Excel.xlFixedFormatType” -as [type] $excelFiles = Get-ChildItem -Path $path -include *.xls, *.xlsx -recurse $objExcel = New-Object -ComObject excel.application $objExcel.visible = $false foreach($wb in $excelFiles) { $filepath = Join-Path -Path $path -ChildPath ($wb.BaseName + “.pdf”) $workbook = $objExcel.wo
$logstring = Invoke-Command -ComputerName $filesServer -ScriptBlock { param( $logstring, $grp ) $Klassenbuchordner = "KB " + $grp.Gruppe $Gruppenordner = $grp.Gruppe $share = $grp.Gruppe $path = "D:\Gruppen\$Gruppenordner" if ((Test-Path D:\Dozenten\01_Klassenbücher\$Klassenbuchordner) -eq $true) {$logstring += "Verzeichnis für Klassenbücher existiert bereits"} else {
我曾经以为我已经弄清楚了整个编码的东西.我似乎错了,因为我无法解释这里发生的事情. 我要做的是使用 tabulate 使用 格式化表 from tabulate import tabulate s = tabulate([[1,2],[3,4]], ["x","y"], tablefmt="fancy_grid") print(s) 在Windows 10下的Ipython 3.5.0的交互式控制台中.我希望结果为 ╒═════╤═════╕ │ x │ y │ ╞═════╪═════╡ │ 1 │ 2 │ ├─────┼─────┤ │ 3 │ 4 │ ╘═════╧═════╛ 但是,我得到了一个 UnicodeEncodeError: 'charmap' codec can't encode character '\u2552' in position 0: character maps to 困惑
我正在尝试将一些文本行保存在与系统不同的编码epage中,例如西里尔(Cyrillic)到使用delphi xe的tfileStream.但是,我找不到任何代码示例来生成这些编码文件? 我尝试使用与tstrings.savetostream相同的代码,但是我不确定我是否正确实现了它(例如,写入式零件),并且想知道它将如何在其他地方进行.这是我的代码: FEncoding := TEncoding.GetEncoding(1251); FFilePool := TObjectDictionary.Create([doOwnsValues]); //... procedure WriteToFile(const aFile, aText: string); var Preamble, Buffer: TBytes; begin // Create the file if it doesn't exist if not FFi
我在Windows XP控制台中的输出Unicode有问题. (Microsoft Windows XP [版本5.1.2600]) 第一个代码是(从 #include #include #include int main(void) { _setmode(_fileno(stdout), _O_U16TEXT); wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n"); wprintf(L"èéøÞǽлљΣæča\n"); wprintf(L"ぐႢ\n"); wprintf(L"\x3050\x10a0\n"); return 0; } 我的代码epage是65001(cp_utf8). excep ⴂ,每个字母看起来都不错.但是ⴂ看起来像方形. Console的默认字体" Lucida Console"没有字体. 因此,我下载了一些可以呈现的字体,但是我无法更改(Visual Studio 2005 Pro
据我了解, NTFS支持Unicode文件名(UTF -16作为Micorsoft声称?). 但是,官方的MSDN文档对于使用哪种代码来存储FAT-32上的文件名(filepaths)非常模糊. 在这里说 OEM代码页(cp437 i Paus)用于存储文件名: http://msdn.microsoft.com/en-us/library/windows/desktop/dd317748.aspx ,但是在这里,事实证明, oem codepages cp437是其中之一: http://msdn.microsoft.com/en-us/library/windows/desktop/dd3177752.aspx ,我们现在所有人都在 sount 之类的公用事业支持脂肪的更多不同的编码,而不仅仅是OEM CodePages设置. 那么,Fat-32文件名的实际CDEPAGE是什么?这取决于在创建脂肪体积时的系统代码吗?脂肪支持真正的双字节字符集诸如UTF-1
我正在编写一个用于复杂应用程序的模块,我的模块应处理由Web服务器返回的JSON响应.因此,我的问题是我如何解码这样的文本: \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0444\u0430\u043c\u0438\u043b\u0438\u0438, \u0438\u043c\u0435\u043d\u0438 (\u043e\u0442\u0447\u0435\u0441\u0442\u0432\u0443 它是西里尔文字,而Mozilla Firefox则表现出应有的作用.我该如何处理那个家伙?我在Delphi 2010. 解决方案 您可以使用uses DBXJSON; const JsonUt8 ='"\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0444\u0430\u043c\u0438\u043b\u0438\u0438, \u0438\u043c\u0435\u