小编Ger*_* Me的帖子

-bash:警告:setlocale:LC_ALL:无法更改区域设置(en_us.utf-8)

将 Mac 从 Sierra 升级到 High Sierra 后,当我使用终端 SSH 连接到 Centos(6 和 7)时,收到 setlocale 警告。

认为有一些解决方法可以解决这些问题,我发现问题是 locale 环境变量.bash_profile都是小写的en_us.utf-8。更改它以en_US.UTF-8 解决问题。

我尝试过的其他解决方案,在互联网上找到的是:

在 CentOS(服务器)中

  • 设置LC_LANG=en_US.utf8修复/etc/environments问题。

在 Mac(客户端)中

  • 删除 ssh_config 中的 SendEnv LC 修复问题

如果我运行locale -a,区域设置是

en_US.utf8在 CentOS 和

en_US_UTF-8在 MacOS 上

CentOS 和 MacOS 中语言环境变量的规范化过程似乎有所不同。在 CentOS 上,它似乎标准化UTF-8为小写并会删除连字符,但en_US在这种情况下需要。在 MacOS 上,它似乎标准化为大写并且需要连字符并接受 的任何大小写混合en_US。因此,兼容的设置是en_US.UTF-8三个字母UTF在任何情况下都可以出现的位置。

(这就是为什么我无法通过在 Mac 中将区域设置变量设置为 来解决问题en_US.utf8,它会将 更改LC_ALL为空白。) …

macos bash utf-8

5
推荐指数
1
解决办法
7368
查看次数

为什么Delphi TMemoryStream读取TBytes和字节数组是不同的?

我正在编写一个程序,使用Delphi 2010对字节序列进行Z85Encoding.所以我写了一个funtiom

function Z85Encode(input, output: TStream): integer
Run Code Online (Sandbox Code Playgroud)

并希望传入一个流.接下来我写了一个重载函数

function Z85Encode(b: TBytes): string;
Run Code Online (Sandbox Code Playgroud)

将字节序列写入TBytesStream(与TMemoryStream相同),调用encode函数,然后将编码数据读取到Result字符串.

问题是我发现TStream.Read的行为与文档非常不同,我无法理解.你可以用其他方式来完成这个功能,但我不太明白为什么?我可能想知道Delphi如何实现TBytes类型.

为了说明我的问题,我编写了以下测试程序

procedure Test;
var
  iStream: TMemoryStream;
  n: integer;
  a: TBytes;
  b: TBytes
  c: array [0..4] of Byte;
begin
  b := TEncoding.UTF8.GetBytes('abcdefghij');  // byte from 97 to 106
  iStream := TMemoryStream.Create;
  try
    iStream.Write(b, Length(b));
    iStream.Seek(0, soBeginning);
    n := iStream.Read(a, 5); // expect only 5 bytes read, but the whole array is back.
    ShowMessage(IntToStr(n));  // n is 5
    ShowMessage(IntToStr(Length(a)));  // length is 10!!
    iStream.Seek(0, soBeginning);
    n := iStream.Read(c, …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

1
推荐指数
1
解决办法
2829
查看次数

标签 统计

bash ×1

delphi ×1

delphi-2010 ×1

macos ×1

utf-8 ×1