问题标签 [codepages]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - python中的字符串编码
在 python 中,字符串可以是 unicode(utf-16 和 utf-8)和具有不同编码(cp1251、cp1252 等)的单字节。是否可以检查编码字符串是什么?例如,
将返回一个带有一个月文本名称的字符串。在 MacOS 下返回的字符串将是 utf-16,在本地英语的 Windows 下,它将是使用 ascii 编码的单字节,在非英语语言环境的 Windows 下,它将通过语言环境的代码页进行编码,例如 cp1251。我该如何处理这样的字符串?
java - 应该使用什么代码页/字符集将来自 MVS 系统的数据解释为 Java 环境?
我遇到了一个有趣的问题(在与遗留系统交互时经常出现这种情况)。我正在开发一个应用程序(目前在 x86 Linux 或 Windows 系统上运行),它可以接收来自各种系统的请求,其中一个是 MVS 系统。
我正在尝试确定应该使用哪个代码页/字符集来解释来自 MVS 系统的请求数据。
过去,我使用 'cp500' (IBM-500) 来解释 z/OS 系统的字节日期,但是我担心 MVS 有点像遗留系统,而且因为 IBM 似乎改变了主意对于要使用的编码(必须有数十个 EBCDIC 编码),cp500 可能不是正确的编码。
我在 Java 字符集上找到的最佳资源是: http: //mindprod.com/jgloss/encoding。但是,从这个站点和 IBM 信息中心,我无法得到明确的答案。
编辑:从我对 Pax 的回复中添加如下:
在请求数据的来源中,我的问题有一个明显的漏洞。在这种情况下,数据的来源是通过 Websphere MQ 接口。Websphere MQ 确实具有转换为正确编码的功能,但仅用于使用 MQMessage.readString() 读取数据,该方法已被弃用。我更喜欢使用它,但是我使用的是专有接口框架,在该框架中我无法更改从 MQQueue 读取消息的方式,它直接从队列中读取字节,因此我是左句柄翻译。
最终答案:我想跟进这件事。事实证明,正确的字符集确实是 cp500 (IBM-500)。但是,我的印象是结果可能会有所不同。给有同样问题的其他人的一些提示:
利用 Charset.availableCharsets();。这将为您提供运行时支持的字符集的地图。我遍历这些集合并打印出我的字节数据翻译成该字符集。虽然它没有给我想要的答案(主要是因为我无法在数据进入时读取数据),但我想它可能对其他人有所帮助。
请参阅:http ://mindprod.com/jgloss/encoding以获取支持的字符集列表。
最后,虽然我没有确认这一点,但请确保您使用的是正确的 JRE。我认为 IBM 运行时支持比 OpenJDK 或 Sun 的运行时更多的 EBCDIC 字符集。
javascript - UTF-8 与 Visual Studio 2008 中包含欧洲字符的 HTML 和 JavaScript 的代码页 1252
我一直在开发一个解析器,它将JavaScript作为输入并创建该 JavaScript 的压缩版本作为输出。
我最初发现解析器在尝试读取输入 JavaScript 时失败。我相信这与Visual Studio 2008默认将其文件保存为UTF-8的事实有关。这样做时,VS在 UTF-8 文件的开头包含几个隐藏字符。
作为一种解决方法,我使用 Visual Studio 将文件保存为代码页 1252。这样做之后,我的解析器能够读取输入的 JavaScript。
请注意,我需要使用包含重音符号的特殊欧洲字符。
所以,这是我的问题:
- 我应该使用代码页 1252 还是 UTF-8?
- 为什么 Visual Studio 默认将文件保存为 UTF-8?
- 如果我选择将文件保存为 1252 会导致问题吗?
- 在我看来,Eclipse 默认将文件保存为代码页 1252。听起来对吗?
.net - .Net unicode 问题,vb6 遗留问题
我在 VB6 中有一个解密程序。我现在想要在 C# 中进行相同的解密。需要解密的字符串是 unicode,所以我使用 Encoding.Unicode.GetString 来读取 C# 中的输入。输入现在看起来与 VB6 中的完全相同。
循环中的前几个字符被解密 ok!然后我遇到了一个不同......程序用与VB6不同的索引解析字符'〜'。
调试时,我在 VB 和 .Net 中看到以下内容:
VB6 ~ = code 152
C# ~ = code 732
不用说,解密失败。我需要为上述角色获得 152。
这里有什么问题?
问候,
米歇尔
windows - 使用 MME 和 DirectMusic 时的 ANSI 或 OEM 代码页?
我注意到,当从 MME 读取 MIDI 端口名称时,这些名称是使用 ANSI 代码页编码的多字节字符串,我的应用程序默认使用它。从 DirectMusic 驱动程序接收这些名称时,这些名称是使用 OEM 代码页编码的宽字符串。有关代码页的快速复习,请参阅Raymond Chen 的这篇文章。
在我的德语系统上,这意味着当使用当前代码页(原来是 ANSI 代码页)时,我从 MME 获得“Audiogerät”,从 DirectMusic 获得“Audioger ö t”,后者是错误的。当我将该姓氏视为 OEM 编码时,此问题将得到解决。
那么我怎么知道使用哪个代码页来解码这些名称呢?为什么来自 DirectMusic 的名称编码不同?它来自USB驱动程序吗?COM 框架?直接音乐?在读取我的 MIDI 端口名称时,如何确定使用哪个代码页?
有关信息:
- 我使用
MultiByteToWideChar()
andWideCharToMultiByte()
函数来执行转换,并使用CP_ACP
andCP_OEMCP
作为要使用的代码页的参数。 - 我用来
midiInGetDeviceCaps()
从 MME 子系统获取 MIDI 端口信息... - ...并
MIDIINCAPS.szPname
使用CP_ACP
(ANSI)代码页进行转换。 - 我用来
IID_IDirectMusic8::EnumPort()
从 DirectMusic 获取端口信息... - ...并
DMUS_PORTCAPS.wszDescription
使用CP_OEMCP
代码页进行转换。
c# - HtmlElementEventArgs KeyPressedCode 混淆
我正在使用以下代码来确定是否为“。” (句号)已进入网络浏览器控件:
根据 msdn KeyPressedCode 返回一个 ASCII 值。如果我输入“。”,我通过断点得到的是“190”。然而。这甚至没有在标准 ASCII 表中列出。显然我可以简单地测试 190,但我担心 KeyPressedCode 可能会在具有不同代码页、语言等的不同系统上返回不同的值。
那么您能否解释一下为什么 KeyPressedCode 返回“190”而不是“46”以及如何“安全”地处理这个问题?
有趣的是,''(空格)的返回值总是正确的('32')。使用 System.Text.Encoding.GetEncoding 和不同的代码页并不能解决问题,但是我对代码页没有太多经验。
windows - 如何获取当前键盘布局的代码页?
我的非 Unicode 应用程序需要能够处理 Unicode 键盘输入(WM_CHAR/等),因此接收 8 位字符代码,然后在内部将其转换为 Unicode。需要 9x 兼容性,因此不能选择使用大多数 Unicode API。
目前它查看 PRIMARYLANGID(GetKeyboardLayout(0)) 返回的语言,并在硬编码表中查找相关代码页。我找不到获取特定语言或键盘布局使用的代码页的函数。然后可以使用 MultiByteToWideChar 转换字符/字符串。
有没有办法获取当前键盘布局的代码页?GetACP 返回不受当前键盘布局影响的默认系统代码页。
sharepoint - Sharepoint 更改 URL 特殊字符
我有一个 URL 存储在 Sharepoint“链接到文档”中,其中包含北欧字符“Ø”作为十六进制(%D8)。Sharepoint 正在对 % 符号进行编码(因此使其成为 %25D8)。
如果我将 URL 直接输入到地址栏中,它可以正常工作。如果我不对它进行 URL 编码,我仍然会遇到同样的问题。有人有什么想法吗?
java - 如何指定与底层 Windows 代码页一致的 Java file.encoding 值?
我有一个 Java 应用程序,它使用InputStreamReader
. 它从其getEncoding
方法中报告“Cp1252”:
这不一定与系统报告的代码页相匹配。例如:
应用程序可能会收到字节 0x81,它在代码页 850 中表示字符ü
。该程序使用代码页 1252 解释该字节,该代码页没有定义该值的任何字符,因此我得到一个问号。
通过在启动应用程序的批处理文件中添加另一个命令行选项,我能够为使用代码页 850 的客户解决此问题:
但当然,并不是我的所有客户都使用代码页 850。如何让 Java 使用与底层 Windows 系统兼容的代码页?我的偏好是我可以将其放入批处理文件中,而 Java 代码保持不变:
unicode - Dummy 的 Unicode 指南
谁能给我一个简明的定义
- 统一码
- UTF7
- UTF8
- UTF16
- UTF32
- 代码页
- 它们与 Ascii/Ansi/Windows 1252 有何不同
我不是在寻找 wikipedia 链接或令人难以置信的细节,只是一些关于 Unicode 的巨大变化是如何产生的以及为什么会出现以及为什么作为程序员应该关心的一些简短信息。