问题标签 [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.

0 投票
1 回答
9246 浏览

utf-8 - Windows XP - cmd.exe - 切换到 utf8 代码页后无法执行批处理文件

使用“mode con cp select=65001”切换到 utf8 代码页后,批处理接缝停止工作,没有任何错误消息。

因此,在代码页 437 或 850 处于活动状态的新启动控制台中执行“cmd.exe /c test.bat”可以正常工作。执行“mode con cp select=65001”工作正常。UTF-8 字符的显示工作正常。执行类似“echo Hallo!”的操作 工作正常。

但是执行“cmd.exe /c test.bat”会停止工作,并且不会显示任何错误消息。

这不仅仅是一个显示错误:批处理文件没有被执行。

切换回任何“旧”字符集可以让它再次正常工作。切换到 UTF8 字符集让它再次停止工作。

当然,放弃 UTF8 是一种解决方案——但在后台会产生不良的副作用。

0 投票
2 回答
1280 浏览

php - PHP:简单的 XML 和不同的代码页并正确获取数据

我正在从事这个项目,我从不同的来源接收不同的 XML 文件。我的 PHP 脚本应该读取它们、解析它们并将它们存储到 mysql 数据库中。

为了解析 XML 文件,我使用 PHP 中的 SimpleXMLElement 类。我以 UTF-8 编码从比利时接收文件,以 iso-8859-1 编码从德国接收文件,以 cp1250 从捷克共和国接收文件,依此类推...

当我将 xml 数据传递给 SimpleXMLElement 并在该对象上打印 asXML() 时,我可以正确地看到原始 xml 文件中的 xml 数据。当我尝试将字段分配给 PHP 变量并在屏幕上打印此变量时,文本看起来已损坏,当然在插入 mysql 数据库时也已损坏。

例子:

XML:

PHP代码:

代码结果(在 linux bash shell 上)将光标向上移动,然后打印: bÃn - Rozb 741,85km ;DÄ(光标移动当然与 PHP 打印出的错误字符有关)

我认为 PHP 将其数据转换为 UTF-8 以将其存储在字符串参数中,因此我假设使用 mb_convert_encoding 从 UTF-8 转换为 cp1250 会显示正确的结果,但事实并非如此。此外,我应该能够以可与所有其他来源组合的格式存储数据。

我对编码/代码页知之甚少,这可能是我无法让它正常工作的原因,但我所知道的是,如果我将不同语言的文本复制/粘贴到新的 UltraEdit 文件中,所有这些都显示正确。UltraEdit 如何处理这个问题?它是否使用 UTF-8(我认为它可以显示任何内容?)

如何转换我的数据,使其始终显示,无论源代码是什么?

0 投票
3 回答
2222 浏览

.net - 如何使用非标准代码页读取 EBCDIC 数据,而不是弄乱数字?

这是给老(呃)手的一个:-)

我正在从大型机 DB2 表中读取二进制转储。该表具有 varchar、char、smallint、integer 和 float 列。为了让它更有趣,DB2 使用了代码页 424(希伯来语)。我需要我的代码独立于代码页。

因此,我使用 System.Text.Encoding 使用流读取器打开文件,如下所示:

并继续使用 VARCHAR 和 CHAR 数据根据它们的长度读入 char 数组

始终记住 VARCHAR 列中的前 2 个字节应该被丢弃并获得正确的字符串

一切都很好!

但现在我到了 SMALLINT 专栏,我遇到了麻烦。有符号数的值存储在 2 个字节中,因为它的大端,我做

我得到错误的数字!例如,如果字节是 00 03,我在 buffer(1) 中得到 0,在 buffer(0) 中得到 3 - 很好。但是当两个字节为 00 20 时,我将 128 读入缓冲区(0)!

因此,在拉了半天的头发之后,我将编码器从流读取器声明中删除,现在我将 32 读入缓冲区(0),就像它应该的那样!!!

最重要的是,非标准代码页编码器弄乱了字节读数!!!

知道如何解决这个问题吗?

0 投票
2 回答
2496 浏览

c++ - 在不同本地化的机器上加载资源时,如何防止非 Unicode 应用程序转换字符集?

我们有一个使用 Visual Studio 编写的非 Unicode C++ 应用程序,它最初是为使用代码页 1252 字符集的机器编写的。

我们的应用程序在读取资源内容后执行许多后处理步骤,包括在某些文件中查找资源字符串。

现在中国的人们开始使用该应用程序,他们的机器使用 PRC 语言环境(将非 unicode 应用程序的默认代码页设置为 936,这是一个多字节字符集)。

似乎CString::LoadString将执行一些转换。这会中断进一步处理,因为我们在其他文件中查找的内容不同。

CMenu::GetMenuString或也是如此CWnd::GetWindowText

糟糕的是,我们不能简单地iconv在我们的文件上使用,因为LoadString, GetMenuStringorGetWindowText会这样:

  • 某些在代码页 1252 中有效的字符在代码页 936 中无效(例如î、û、ñ、–)并被替换为问号
  • 某些在代码页 1252 中有效的字符在代码页 936 中无效(例如É),但被替换为替代字符(É => é)
  • 两个代码页中都存在一些字符,但表示方式不同,在 CP936 中通常有两个字节
  • 两个代码页中的某些字符(包括所有 ASCII 字符)匹配。

我希望加载资源内容的这三个函数加载二进制内容,而不执行任何字符集转换。我试图修改.rc文件,LANGUAGE LANG_INVARIANT, SUBLANG_NEUTRAL但这并没有改变任何东西。

资源文件还包括一个#pragma code_page(1252); 可以安全删除吗?那个 pragma 是干什么用的?

谢谢您的回答。

0 投票
2 回答
186 浏览

mysql - 在 MySQL 数据库中存储具有未确定代码页的文本的最佳方法

我目前正在编写一个应用程序(App1),它从另一个应用程序(我们称之为App2)远程检索部分文本。全球有多个App2实例,它们都根据本地系统代码页解释其字符串。App2不支持 Unicode。

App1从App2检索文本,没有任何关于文本代码页的提示,但预计在稍后的时间点,将进行手动过程来选择代码页以正确解释文本。

以前自动确定文本代码页的尝试都失败了。

同时,在人工确定之前,这些数据必须存储在 MySQL 数据库中。
存储这些数据的最佳方式是什么?具体来说,什么CHARSETCOLLATION最适合在这里使用?

我相信如果字符对字段的字符集无效,MySQL 将不会容忍将字符插入字段。

如果我可以在插入数据库之前检测代码页并将数据转换为 unicode,那将是理想的,但我不知道如何能够一致且可靠地完成此操作。

0 投票
2 回答
1396 浏览

.net - 什么代码页将 'ç' 编码为 '?º' (0x3f 0xba)

今天我收到一个客户的文件,我必须阅读,但它包含奇怪的字符。使用已知名称,我可以猜出某些字符的含义。

例如:

  • 我已经尝试了所有代码页(.Net 已知)来导入文件,并查看它们是否包含我知道的单词。但是没有代码页让我满意。
  • 在记事本++中打开文件认为它是ANSI,并且还显示不需要的字符。(但它有一个有用的十六进制编辑器插件)。
  • 其他文件(来自同一用户和 zipfile)以 UTF-8 编码。

从我收到文件的那个人那里,我不能指望帮助。(使用谷歌翻译)他向我明确表示,他发现创建文件非常困难,而且他正在使用我无法访问的软件(我相信是 SAP)。

有没有其他方法可以找到他刚刚发送给我的文件的编码?

0 投票
1 回答
682 浏览

delphi - 有人用过Delphi的ICU吗?

有没有人使用过 Delphi 的 ICU(见http://site.icu-project.org/)DLL

具体来说,我对代码页转换和整理功能感兴趣。

查看头文件,它们似乎主要是在使用类的 C++ 中,所以在没有做太多研究的情况下,我认为有必要围绕它创建一个简单的包装器,以导出可以在 Delphi 中轻松导入的简单函数。

有没有人为此做过任何工作?

或者任何人都可以为 Delphi 推荐一个不同的解决方案,它对代码页和排序规则具有类似的广泛覆盖范围?

0 投票
2 回答
1639 浏览

c - gnome-terminal 是否支持 DOS 代码页?

在我的 C 程序中,我不得不将我的 unicode 制框字符转换为 DOS 代码页 437 的转义字符,以使其在 Windows 命令提示符下工作。在为 linux 本地编译程序时,是否可以更改 gnome-terminal 的代码页以正确显示这些字符?

谢谢。

0 投票
2 回答
1461 浏览

c# - Silverlight 的 ANSI 编码实现

我需要在我的 Silverlight 应用程序中对某些代码页进行编码实现。特别是我需要从 zip-archive 中读取非英语文件名(正在打开Application.GetResourceStream)。

Silverlight 仅包含 Unicode 编码(Encoding.UTF8、Encoding.Unicode、Encoding.BigEndianUnicode)。Encoding.GetEncoding 为其他编码名称引发异常。

但我需要一些 ANSI 代码页(特别是 866)的编码类实现。在桌面上我会通过 Encoding.GetEncoding(866) 得到它。

我在哪里可以获得最简单的实现?

ps 我知道这个问题与 Silverlight 几乎没有关系,但没有提及它,我会建议使用 Encoding.GetEncoding 我猜..

0 投票
1 回答
2378 浏览

linux - MS Access *.MDB 转换为 MySQL 或 SQLite,数据编码问题

您好,我将介绍我的情况:

  • 我在 linux ubuntu
  • 我有几个 Jet3 .MDB(MS Acess 数据库),每个大约 500MB,其中的数据以 cp1256/WINDOWS-1256 编码
  • 我已经按照这篇文章制作了 sqlite 数据库来进行转换http://cltb.ojuba.org/en/articles/mdb2sqlite

这是我为转换数据库而制作的 bash 脚本。假设我有 MS Access x.MDB

我尝试将 MDB_JET3_CHARSET 更改为 WINDOWS-1256、cp1256、WINDOWS-1251、cp1251、UTF-8。当我浏览它时,有些会在数据中产生不同的结果,但仍然毫无意义。

之前谢谢,对不起我的英语不好