2013-07-31 5 views
0

Я выпустил приложение для Windows-телефона некоторое время назад. С тех пор, BugSense сообщили о проблеме, которая вызывает некоторые сбои в зарубежных странах:иностранная культура XML-синтаксический анализ текста

System.ArgumentException - символ «I» (0x0130) не доступен в этом SpriteFont. Если применимо, отредактируйте начало и конец шрифта CharacterRegions, чтобы включить этот символ. Имя параметра: характер

и вот трассировки стека:

на Microsoft.Xna.Framework.Graphics.SpriteFont.GetIndexForCharacter (Char характер) в Microsoft.Xna.Framework.Graphics .SpriteFont.InternalMeasure (StringProxy & текст) в Microsoft.Xna.Framework.Graphics.SpriteFont.MeasureString (String текст) в GlobalEngine.Visual.TextBase.CalculateSpriteOrigin (отправитель объекта, EventArgs е) в Sys tem.EventHandler.Invoke (отправитель объекта, EventArgs е) в GlobalEngine.Visual.TextBase.set_FormattedText (строковое значение) при GlobalEngine.Visual.TextLabel.set_Text (строковое значение) при FourWordsLibrary.GameUtils.Letter..ctor (Символьное письма, assetManager assetManager, SpriteBatch SpriteBatch, Единичная ширина) при FourWordsLibrary.GameUtils.Word..ctor (String, String orderedWord shuffledWord, assetManager assetManager, SpriteBatch SpriteBatch, InputManager InputManager, одиночный letterWidth) в FourWordsLibrary.GameUtils.Word ..ctor (String orderedWord, String shuffledWord, AssetManager assetManager, SpriteBatch spriteBatch, InputManager inputManager) в FourWords Library.Controllers.GameControl.StatePlay.SetupNextLevel() в FourWordsLibrary.Controllers.GameControl.StatePlay.Activate (Object OBJ) при GlobalEngine.Base.StateManager 1.SetState(T state, Object obj) at GlobalEngine.Base.StateManager 1.SetState (Т состояние) в FourWordsLibrary.Controllers.GameControl.SetPack (PackManager packManager) на FourWords.Screens.GameScreen..ctor (двигатель двигателя, Object объект)

Мое приложение является игра в слова, и я получить слова для каждого уровня из файла XML. Поэтому я подозреваю, что, когда XmlReader читает файл, он делает это, используя иностранную культуру, которая приводит к получению латинской буквы, а затем приложение падает, когда пытается нарисовать букву с использованием строго английского шрифта sprite-font. Я попытался найти способ проинструктировать XmlReader для чтения с использованием InvariantCulture, аналогично тому, который найден в методе .toString(), но не нашел. Есть идеи, как решить эту проблему?

+0

У меня есть аналогичная проблема, вы когда-нибудь выяснили, как ее решить? – Orujimaru

ответ

0

Похоже, для меня проблема ввода XML-файла. Проверьте, содержит ли он этот «недопустимый» символ («İ» (0x0130)) и при необходимости исправьте его. Если вы написали входной XML с помощью своего приложения/игры, проверьте, записываете ли вы содержимое с помощью InvariantCulture.

Br,

+0

Я не нашел такого символа в своем XML-документе. Я создаю и заполняю свой XML-файл, используя базовый редактор, который я создал в WPF, где я ввожу слова в основные текстовые поля. Затем слова записываются в XML с использованием объекта StreamWriter, который, похоже, не принимает никаких аргументов, связанных с культурой. – Ramsay

+0

Проверьте свой редактор, где вы пишете слова из текстовых полей, вы можете вызвать .ToString(). Например, ToUpperInvariant() (если вы используете только прописные буквы). В противном случае вызов .ToString (System.Globalization.CultureInfo.InvariantCulture) также поможет, если вы сможете опубликовать небольшой образец XML – vidonism

Смежные вопросы