不久前我发布了一个 Windows Phone 应用程序。从那时起,BugSense 报告了一个在国外导致一些崩溃的问题:
System.ArgumentException - 字符 'İ' (0x0130) 在此 SpriteFont 中不可用。如果适用,请调整字体的开始和结束 CharacterRegions 以包含此字符。参数名称:字符
这是堆栈跟踪:
在 Microsoft.Xna.Framework.Graphics.SpriteFont.GetIndexForCharacter(Char character) 在 Microsoft.Xna.Framework.Graphics.SpriteFont.InternalMeasure(StringProxy& text) 在 Microsoft.Xna.Framework.Graphics.SpriteFont.MeasureString(String text) 在 GlobalEngine .Visual.TextBase.CalculateSpriteOrigin(Object sender, EventArgs e) at System.EventHandler.Invoke(Object sender, EventArgs e) at GlobalEngine.Visual.TextBase.set_FormattedText(String value) at GlobalEngine.Visual.TextLabel.set_Text(String value)在 FourWordsLibrary.GameUtils.Letter..ctor(字符字母,AssetManager 资产管理器,SpriteBatch spriteBatch,单宽度)在 FourWordsLibrary.GameUtils.Word..ctor(字符串排序字,字符串 shuffledWord,AssetManager 资产管理器,SpriteBatch spriteBatch,InputManager inputManager,单字母宽度)在四字图书馆。GameUtils.Word..ctor(String orderedWord, String shuffledWord, AssetManager assetManager, SpriteBatch spriteBatch, InputManager inputManager) at FourWordsLibrary.Controllers.GameControl.StatePlay.SetupNextLevel() at FourWordsLibrary.Controllers.GameControl.StatePlay.Activate(Object obj) at FourWordsLibrary.Controllers.GameControl.StatePlay.Activate(Object obj) at GlobalEngine .Base.StateManager
1.SetState(T state, Object obj) at GlobalEngine.Base.StateManager
1.SetState(T state) at FourWordsLibrary.Controllers.GameControl.SetPack(PackManager packManager) at FourWords.Screens.GameScreen..ctor(Engine engine, Object obj)
我的应用程序是一个文字游戏,我从 XML 文件中检索每个级别的单词。所以我怀疑当 XmlReader 正在读取文件时,它使用了一种外国文化,这会导致检索到一个拉丁字母,然后当它尝试使用严格的英文 sprite-font 绘制字母时应用程序崩溃。我尝试寻找一种方法来指示 XmlReader 使用 InvariantCulture 进行读取,类似于在 .toString() 方法中找到的方法,但没有找到任何方法。任何想法如何解决这个问题?