命名空间中的μ和é

时间:2015-08-06 14:43:40

标签: c# namespaces

我们开发了一个c#程序。该程序在欧洲分发,在misc硬件配置上没有问题。我们程序中的一些命名空间包含'μ'或'é'字符。当在“非欧洲”(即中国或某些美国系统)上部署我们的程序时,问题发生在过程中,'μ'变为'μ'会导致很多问题。是什么导致了这个问题,我们如何解决它(最好不要更改名称空间的名称)

编辑2015.08.07

感谢大家的意见,但澄清一下:源文件不是这样分发的。该程序被编译为exe,然后使用nsis进行分发。源控制使用SVN完成。如何在源文件中验证BOM的存在?

3 个答案:

答案 0 :(得分:1)

您或收件人或两者都使用UTF-8以外的字符编码。

人们不应该这样做,但他们确实如此。

除非您在每个文件的开头都包含BOM,否则某些工具将默认为旧版编码,因此请在每个文件的开头添加BOM。

答案 1 :(得分:0)

您在使用不同系统使用的字符集方面存在差异。您的软件可能运行在假定ISO-8859的系统上,最常用于欧洲语言,而您遇到的中国和美国系统可能使用通用字符集(ISO / IEC 10646)。两者之间的映射不是简单的1对1,因此您遇到了您遇到的问题。 W3.org在http://www.w3.org/International/articles/definitions-characters/

上有一篇关于这个主题的好文章 请特别注意"字符集,编码字符集和编码"以及"文档字符集"部分。如果这是一个Web应用程序," HTTP标头"可能特别有用。

答案 2 :(得分:0)

这不是答案。但是我想指出这可能是一个编码问题,但这可能发生在同一个系统上,并且仅在运行代码(此处猜测)一次读取一个字节时显示,而不是显式读取特定编码的文本

我有一个C程序(如果重要的话,32位)使用fgetc读入文件并保存字符以用作名称中的“非法”字符。它不是花哨的,只是为了防止一些ascii字符意外进入,就像一个东西/对象/标签名称中的'(撇号)。有人要我测试μ(mu,在此接口中显示为stackoverflow的单个字符)。我使用MS Word中的Insert-Symbol生成了这个(没有在MS Word中检查底层编码)。我从MS Word中剪切它并使用Notepad ++将其插入到文本文件中。在Notepad ++和MS Word中,它似乎是相同的符号。但是一次fgetc(取一个int或char,但你想要考虑它),在我的调试输出中看到一个测试用例:

class App extends React.Component {
  constructor(props) {
    super();
    this.state = {
      selectedAppt: appts[0]
    }
  }

  handleApptSelection(apptRec) {
    this.setState({selectedAppt: apptRec});  
  }

  render() {
    const {selectedAppt} = this.state;
    return (
      <div className="appContainer">
        <Nav />
        <div className="appContent">
          <Sidebar appts={this.props.appts} onSelect={this.handleApptSelection.bind(this)}/>
          <Patient appts={this.props.appts} selection={selectedAppt}/>
        </div>
      </div>
    );
}

我正在使用Visual C ++ Express 2013进行编译。

我很高兴它捕获了非法字符,并希望这不仅仅是本主题读者的噪音。