ios - 如何在我的 NSString 中正确编码 Unicode 字符?
<p><h1>问题陈述</h1>
<p>我创建了许多字符串,将它们连接成 CSV 格式,然后将字符串作为附件通过电子邮件发送。</p>
<p>当这些字符串仅包含 ASCII 字符时,将正确构建 CSV 文件并通过电子邮件发送。当我包含非 ASCII 字符时,结果字符串格式不正确,并且 CSV 文件未正确创建。 (电子邮件 View 显示附件,但未发送。)</p>
<p>例如,这是可行的:</p>
<pre><code>uncle bill's house of pancakes
</code></pre>
<p>但这不是(注意大撇号):</p>
<pre><code>uncle bill’s house of pancakes
</code></pre>
<h2>问题</h2>
<p>如何正确创建和编码最终字符串,以便包含所有有效的 unicode 字符并正确形成结果字符串?</p>
<h1>注意事项</h1>
<ul>
<li><p>字符串是通过 UITextField 创建的,然后写入核心数据存储区,然后再从核心数据存储区读取。</p></li>
<li><p>这表明问题在于字符串的初始创建和编码:<strong> <a href="https://stackoverflow.com/questions/5447413/nsstring-unicode-encoding-problem" rel="noreferrer noopener nofollow">NSString unicode encoding problem</a> </strong></p></li>
<li><p>我不想这样做:<strong> <a href="https://stackoverflow.com/questions/6361586/remove-non-ascii-characters-from-nsstring-in-objective-c" rel="noreferrer noopener nofollow">remove non ASCII characters from NSString in objective-c</a> </strong></p></li>
<li><p>字符串可以很好地写入数据存储或从数据存储中读取。字符串在应用程序的表格 View 中正确(单独)显示。该问题仅在将电子邮件附件的字符串连接在一起时才会出现。</p></li>
</ul>
<h3>字符串处理代码</h3>
<p>我像这样将我的字符串连接在一起:</p>
<pre><code>;
;
;
etc.
</code></pre>
<p>用无聊的引号代替大引号可以让它工作,但我不想这样做:</p>
<pre><code>- (NSMutableString *)cleanString:(NSString *)activity {
NSString *temp1 = ;
NSString *temp2 = ;
NSString *temp3 = ;
NSString *temp4 = ;
return ;
}
</code></pre>
<p><strong>编辑:</strong>
电子邮件已发送:</p>
<pre><code> NSString *attachment = ;
mimeType:nil fileName:@"MyCSVFile.csv"];
</code></pre>
<p>其中 <code>formatReportCSV</code> 是连接并返回 csv 字符串的函数。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您似乎遇到了字符串编码问题。在没有看到您的核心数据模型是什么样子的情况下,我认为问题归结为以下代码重现的问题。</p>
<pre><code>NSString *string1 = @"Uncle bill’s house of pancakes.";
NSString *string2 = @" Appended with some garbage's stuff.";
NSMutableString *mutableString = ;
;
NSLog(@"We got: %@", mutableString);
// We got: Uncle bill’s house of pancakes. Appended with some garbage's stuff.
NSData *storedVersion = ;
NSString *restoredString = [ initWithData: storedVersion encoding: NSStringEncodingConversionAllowLossy];
NSLog(@"Restored string with NSStringEncodingConversionAllowLossy: %@", restoredString);
// Restored string with NSStringEncodingConversionAllowLossy:
storedVersion = ;
restoredString = [ initWithData: storedVersion encoding: NSUTF8StringEncoding];
NSLog(@"Restored string with UTF8: %@", restoredString);
// Restored string with UTF8: Uncle bill’s house of pancakes. Appended with some garbage's stuff.
</code></pre>
<p>请注意第一个字符串(使用 ASCII 编码)如何无法处理非 ASCII 字符的存在(如果您使用 <code>dataUsingEncoding:allowsLossyConversion:</code> 并且第二个参数是 <code>是的</code>)。 </p>
<p>这段代码应该可以解决问题:</p>
<pre><code>NSString *attachment = ;
mimeType:nil fileName:@"MyCSVFile.csv"];
</code></pre>
<p>注意:如果您需要处理日语等非 UTF8 语言,您可能需要使用其中一种 UTF16 字符串编码。</p></p>
<p style="font-size: 20px;">关于ios - 如何在我的 NSString 中正确编码 Unicode 字符?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/16078747/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/16078747/
</a>
</p>
页:
[1]