【问题标题】:foreign culture XML text parsing外来文化XML文本解析
【发布时间】:2013-08-01 17:40:14
【问题描述】:

不久前我发布了一个 Windows Phone 应用程序。从那时起,BugSense 报告了一个导致国外一些崩溃的问题:

System.ArgumentException - 字符 'İ' (0x0130) 不可用 在这个 SpriteFont 中。如果适用,调整字体的开始和结束 CharacterRegions 以包含此字符。参数名称:字符

这是堆栈跟踪:

在 Microsoft.Xna.Framework.Graphics.SpriteFont.GetIndexForCharacter(Char 字符)在 Microsoft.Xna.Framework.Graphics.SpriteFont.InternalMeasure(StringProxy& 文本)在 Microsoft.Xna.Framework.Graphics.SpriteFont.MeasureString(字符串文本) 在 GlobalEngine.Visual.TextBase.CalculateSpriteOrigin(对象发件人, EventArgs e) 在 System.EventHandler.Invoke(Object sender, EventArgs e) 在 GlobalEngine.Visual.TextBase.set_FormattedText(字符串值) GlobalEngine.Visual.TextLabel.set_Text(字符串值)在 FourWordsLibrary.GameUtils.Letter..ctor(Char letter, AssetManager 资产管理器,SpriteBatch spriteBatch,单一宽度)在 FourWordsLibrary.GameUtils.Word..ctor(String orderedWord, String shuffledWord、AssetManager 资产管理器、SpriteBatch spriteBatch、 InputManager inputManager, Single letterWidth) at FourWordsLibrary.GameUtils.Word..ctor(String orderedWord, String shuffledWord、AssetManager 资产管理器、SpriteBatch spriteBatch、 输入管理器输入管理器)在 FourWordsLibrary.Controllers.GameControl.StatePlay.SetupNextLevel() 在 FourWordsLibrary.Controllers.GameControl.StatePlay.Activate(对象 obj) 在 GlobalEngine.Base.StateManager1.SetState(T state, Object obj) at GlobalEngine.Base.StateManager1.SetState(T state) 在 FourWordsLibrary.Controllers.GameControl.SetPack(PackManager packManager)在 FourWords.Screens.GameScreen..ctor(引擎引擎, 对象 obj)

我的应用程序是一个文字游戏,我从 XML 文件中检索每个级别的单词。所以我怀疑当 XmlReader 正在读取文件时,它使用了一种外国文化,这会导致检索到一个拉丁字母,然后当它尝试使用严格的英文 sprite-font 绘制字母时应用程序崩溃。 我尝试寻找一种方法来指示 XmlReader 使用 InvariantCulture 进行读取,类似于在 .toString() 方法中找到的方法,但没有找到任何方法。任何想法如何解决这个问题?

【问题讨论】:

  • 我也有类似的问题,你有没有想过如何解决?

标签: c# xml windows-phone-7 exception xna


【解决方案1】:

对我来说似乎更像是一个输入 XML 文件问题。检查它是否包含此“无效”字符(“İ”(0x0130))并在必要时进行更正。如果您使用您的应用/游戏编写输入 XML,请检查您是否也在使用 InvariantCulture 编写内容。

兄弟,

【讨论】:

  • 我在我的 XML 文档中没有找到这样的字符。我使用在 WPF 中创建的基本编辑器创建和填充我的 XML 文件,我在其中将单词键入基本文本框中。然后使用 StreamWriter 对象将单词写入 XML,该对象似乎不接受任何与文化相关的参数。
  • 检查你的编辑器你在哪里写文本框中的单词,你可以调用 .ToString().ToUpperInvariant() 例如(如果你只使用大写字母)。否则调用 .ToString(System.Globalization.CultureInfo.InvariantCulture) 如果您可以发布一个小的 XML 示例也会有所帮助
猜你喜欢
  • 1970-01-01
  • 2019-12-06
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2012-04-12
  • 2014-08-27
相关资源
最近更新 更多