首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Squeak Monticello字符编码

Squeak Monticello字符编码
EN

Stack Overflow用户
提问于 2013-05-20 08:55:15
回答 2查看 295关注 0票数 2

对于一个工作项目,我使用的是无头Squeak (无显示,远程) Linuxserver,也使用Squeak在Windows开发人员机器上。

开发人员机器上的代码使用Monticello进行管理。不幸的是,我不得不使用SFTP将mcz复制到服务器上(例如,由于安全原因,服务器上不可能有一个推送存储库)。然后,代码由例如:

MczInstaller installFileNamed: 'name-b.18.mcz'.

一般都能用。

不幸的是,我们的代码库包含包含Umlauts和其他非ascii字符的字符串。在Monticello-重新导入过程中,其中一些被替换为其他字符,而一些被替换为一无所有。

我也试过了。

MczInstaller installStream: (FileStream readOnlyFileNamed: '...') binary

(注意..mcz实际上是..zip的,所以二进制应该是合适的,我想这是默认的)

找出如何使蒙蒂塞洛的转会保本( internal-encoding of non‘s)是我问题的主要目标。将所有源代码更改为仅使用ascii字符串(至少在此代码库中是如此)并不那么可取,因为需要手工操作。如果您对为什么不是简单的grep替换感兴趣,请阅读下面的注释:

(附带注意:(一个简化/特例)代码基使用Side的#text:方法来呈现包含必须由html-转义的字符的字符串。这适用于我们的非ascii,例如,它将ä转换为ä,如果我们要grep-显式地用ä替换文字,那么我们将不得不使用#html:方法(否则双转义),但是这将要求我们替换所有其他必须为html转义的字符(例如&),但是源代码本身也包含这样的字符。还有其他一些情况,比如一些使用第三方字符串的#text:s,它们可能不会被#html的.取代。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-20 14:11:03

Squeak内部使用unicode (ISO 10646)对字符串中的字符进行编码。

它可能对16r80到: 16r9F范围内的字符使用像CP1252这样的扩展,但我现在不太确定了。

字符代码是按照流source.st上的方式编写的,当所有字符都是<= 16 all时,这些代码是由ByteString的单个字节组成的。在这种情况下,文件应该看起来像在ISO-8859-L1或CP1252编码。

如果您的字符代码>16 you,则在Squeak中使用WideString。同样,代码是按照流source.st上的方式编写的,但这一次是32位代码(按大端顺序编写)。从技术上讲,编码是UTF-32BE。

那么MczInstaller是做什么的呢?它使用快照/source.st e.st文件,并使用setConverterForCode读取该文件,该文件要么是UTF-8,要么是MacRoman.因此,非ASCII字符可能会被更改,如果WideString被重新解释为ByteString,情况就更糟了。

MC本身并不使用存档中的快照/source.st e.st成员。

相反,它使用snapshot.bin (参见MCMczReader,MCMczWriter中的代码)。

这是一个二进制文件,其格式由DataStream控制。

您应该使用的代码片段是:

代码语言:javascript
复制
MCMczReader loadVersionFile: 'YourPackage-b.18.mcz'
票数 3
EN

Stack Overflow用户

发布于 2013-05-20 12:01:33

Monticello并不真正了解字符编码。我不知道squeak的当前情况,但我最后一次调查它时,有一个假定的latin1字符编码。但这意味着它应该在你的情况下完美无缺地工作。

不管怎么说,如果你是从同一种图像上写作和阅读的话,它应该能起作用。如果正确的字符编码通常失败,内部字节表示将从内存写入磁盘。虽然这样可以防止任何跨方言的包交换,但如果使用相同的图像类型,则应该可以工作。

无论如何,有些事情应该或可能奏效,但它们经常出错。因此,大多数项目都试图避免在代码中使用非7位字符。您不需要将非7位字符转换为HTML实体。您可以使用

代码语言:javascript
复制
Character value: 228

用于在不使用非7位字符的情况下生成代码。对于每个您想要添加转换的字符,您可以这样做。

代码语言:javascript
复制
$ä asciiValue => 228

我知道这不是一些人想得到的答案。但是monticello是这些东西之一,仍然需要为正确的字符编码进行调整。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16645848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档