【问题标题】:How generate a char arrray of a specific charset?如何生成特定字符集的字符数组?
【发布时间】:2016-05-27 10:57:12
【问题描述】:

我想用整个ISO 8859-1 字符集生成一个IEnumerable<char>。根据这个定义:to this definition

我试过了:

        testCollection = Enumerable.Range(0x20, 0xFF)
                  .Select(i => Convert.ToChar(i))
                  .Where(c => (c <= 0x7E && c >= 0xA1));

问题是 testCollection 总是空的。我做错了什么?

【问题讨论】:

  • .Range(0x20, 0xFF)????我认为它应该以 0xff 结束,而不是 0x120。 (您是否还关心使用相应的Encoding 执行正确的转换,或者只是字节到字符就足以满足您的目的?)
  • 字节转char就够了
  • @AlexeiLevenkov 我明白了。我误读了范围参数

标签: c# character-encoding char


【解决方案1】:

c &lt;= 0x7E &amp;&amp; c &gt;= 0xA1 永远不会是真的。

试试c &lt;= 0xA1 &amp;&amp; c &gt;= 0x7E

其实我会这样写:

0x7E &lt;= c &amp;&amp; c &lt;= 0xA1

因为这将被测试的值置于两个范围值之间,我认为这样更容易看出它是正确的。

不过,您的代码有些奇怪;它使用 20h 到 ffh 的初始范围,但随后仅使用从 7eh 到 a1h 的子部分。为什么不直接使用它作为初始范围并丢失Where()

你也可以这样做:

char start = '\x7e';
char end   = '\xa1';
var testCollection = new char[end-start+1];

for (char curr = start; curr <= end; ++curr)
    testCollection[curr - start] = curr;

【讨论】:

猜你喜欢
  • 2016-09-10
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多